导语:最近写报表的时候,顾问想把小数展示换城分数展示,例如0.75显示为3/4,哈哈哈哈,有点奇怪,实现起来还挺好玩的,要多考虑一些情况,封装了一个函数,下面贴一下代码。

一、函数信息:

字段 描述 属性
函数名称 ZDECIMAL_TO_FRACTION 小数转分数
函数入参 IV_DECIMAL 必填
函数出参 IV_FRACTION 未约分
IV_FRACTION_ALL 约分
IV_FRACTION_Y 约分后的小数位
IV_FRACTION_I 整数表达

二、代码

FUNCTION zdecimal_to_fraction.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_DECIMAL)
*"  EXPORTING
*"     REFERENCE(IV_FRACTION)
*"     REFERENCE(IV_FRACTION_ALL)
*"     REFERENCE(IV_FRACTION_Y)
*"     REFERENCE(IV_FRACTION_I)
*"----------------------------------------------------------------------DATA : lv_change      TYPE char255.DATA : lv_int         TYPE char255.DATA : lv_dec         TYPE char255.DATA : lv_molecule    TYPE char255.  "分子DATA : lv_denominator TYPE char255.  "分母DATA : n              TYPE i.DATA : lv_len_dec     TYPE i.DATA : lv_len         TYPE i.DATA : lv_over.IF iv_decimal IS NOT INITIAL.lv_change = iv_decimal.CONDENSE lv_change.SPLIT  lv_change AT '.' INTO lv_int lv_dec.IF lv_dec <> 0 AND lv_dec IS NOT INITIAL.lv_len = strlen( lv_dec ).IF lv_len < 30.lv_molecule = lv_dec."分子赋值lv_denominator = 1. "分母赋值CONDENSE lv_denominator.DO lv_len TIMES.lv_denominator = 10 * lv_denominator.   lv_change = lv_change * 10.CONDENSE lv_denominator.CONDENSE lv_change.ENDDO."未约分的数据【output】iv_fraction  = lv_change && '/' && lv_denominator."小数部分转换成分数DO .IF lv_molecule MOD 2 = 0 AND lv_denominator MOD 2 = 0.lv_molecule    = lv_molecule    / 2.lv_denominator = lv_denominator / 2.ELSEIF lv_molecule MOD 3 = 0 AND lv_denominator MOD 3 = 0.lv_molecule    = lv_molecule    / 3.lv_denominator = lv_denominator / 3.ELSEIF lv_molecule MOD 5 = 0 AND lv_denominator MOD 5 = 0.lv_molecule    = lv_molecule    / 5.lv_denominator = lv_denominator / 5.ELSEIF lv_molecule MOD 7 = 0 AND lv_denominator MOD 7 = 0.lv_molecule    = lv_molecule    / 7.lv_denominator = lv_denominator / 7.ELSE.CONDENSE lv_molecule.CONDENSE lv_denominator.EXIT.ENDIF.ENDDO."约分后的小数部分【output】iv_fraction_y = lv_molecule &&  '/' && lv_denominator."整数表达式【output】iv_fraction_i = lv_int && '又' && lv_molecule &&  '/' && lv_denominator."全部数据转换成分数lv_molecule = lv_int * lv_denominator + lv_molecule.DO .IF lv_molecule MOD 2 = 0 AND lv_denominator MOD 2 = 0.lv_molecule    = lv_molecule    / 2.lv_denominator = lv_denominator / 2.ELSEIF lv_molecule MOD 3 = 0 AND lv_denominator MOD 3 = 0.lv_molecule    = lv_molecule    / 3.lv_denominator = lv_denominator / 3.ELSEIF lv_molecule MOD 5 = 0 AND lv_denominator MOD 5 = 0.lv_molecule    = lv_molecule    / 5.lv_denominator = lv_denominator / 5.ELSEIF lv_molecule MOD 7 = 0 AND lv_denominator MOD 7 = 0.lv_molecule    = lv_molecule    / 7.lv_denominator = lv_denominator / 7.ELSE.CONDENSE lv_molecule.CONDENSE lv_denominator.EXIT.ENDIF.ENDDO."约分后的小数部分【output】iv_fraction_all = lv_molecule &&  '/' && lv_denominator.ELSE.iv_fraction_y = '小数过小,无法计算!'.iv_fraction_i = '小数过小,无法计算!'.ENDIF.ELSE.iv_fraction      = lv_int && '/' && 1.iv_fraction_y    = lv_int && '/' && 1.iv_fraction_all  = lv_int && '/' && 1.iv_fraction_i    = lv_int.ENDIF.ENDIF.
ENDFUNCTION.

三、效果示例

作者:小飞猪猪猪猪猪猪猪–CSDN

SAP ABAP 小数转分数\约分相关推荐

  1. 小数点化分数的过程_分数和小数的互化

    <分数和小数的互化>由会员分享,可在线阅读,更多相关<分数和小数的互化(3页珍藏版)>请在人人文库网上搜索. 1._五__年级__数学____备课组教案教师备课时间课时课题分数 ...

  2. 小数加分数怎样计算讲解_“分数,小数,百分数 的互化”我这样教学,学生很快就学会了。...

    这部分知识千万不能忽视,用途可大了.我们在进行分数,小数,百分数 四则混合运算时,不会三者之间的转化,很难把题计算准确.那么三者之间怎样转化呢?其实就这么几步: 一,分数化小数,用分数的分子除以分数的 ...

  3. 小数点化分数的过程_怎么把小数化成分数

    展开全部 小数化成分数的方法: 1.小数点前面的整数部分保持不变. 2.看是几位小数,就在1后面添几个0做分母: 3.把原来的小62616964757a686964616fe4b893e5b19e31 ...

  4. 分数化成有限小数的方法_分数化小数的方法|小数化分数题目

    [www.520z-2.com - 话题作文] 小数由整数部分.小数部分和小数点组成.当测量物体时往往会得到的不是整数的数,古人就发明了小数来补充整数 小数是十进制分数的一种特殊表现形式.下面是小学生 ...

  5. 小数点化分数的过程_小学数学分数和小数互化知识点归纳

    第1篇:小学数学分数和小数互化知识点归纳 1.小数化成分数:原来有几位小数,就在1的后面写几个零作分母,把原来的小数去掉小数点作分子,能约分的要约分. 2.分数化成小数:用分母去除分子.能除尽的就化成 ...

  6. 小数化分数 思路及代码模板 c++实现

    小数化分数 将一个小数化成一个最简分数的模板,小数包含简单小数和循环小数. 对于循环小数的输入我们将循环体用括号括起来表示. 思路 首先我们将小数部分的数化为分数:对于整数部分我们只需要将化好的分子加 ...

  7. HNU程序设计-小数化分数

    一.问题描述 二.问题分析及思路 小数化分数: 1.对于不循环小数,小数点后有i位,则分子为这i位数,分母为10的i次方,约分得到最简分数(除最大公约数) 2.对于只有循环的小数,分子为循环的部分(i ...

  8. 小数乘分数怎么算过程_小数乘分数如何计算?

    (1)将分数化成小数,再按小数的乘法法则计算. 如0.21×1/2=0.21×0.5=0.105. (2)将小数化成分数,再按分数的乘法法则计算. 如0.32×3/5=32/100×3/5=8/25× ...

  9. 小数乘分数怎么算过程_小数乘以分数公开课教学设计

    如何让学生在现实情景中体会和理解数学理念,丰富练习形式,加强计算与实际的应用联系,培养学生应用数学的意识和能力呢,以下是小编整理的<小数乘以分数公开课教学设计>,供您阅读,参考.希望对您有 ...

最新文章

  1. datatable 汇总_【2019 版】中国石油大学(北京)计算机考研信息、资料汇总
  2. 2019寒假作业二:PTA7-1币值转换
  3. java pattern用法_Java Pattern和Matcher用法
  4. 【Apache POI】基础处理方法总结
  5. mysql 读取comment_Mysql 获取表的comment 字段
  6. vc下禁止按钮连续点击的方法
  7. BasicAuth和OAuth
  8. #Pragma Pack(n)与内存分配 pragma pack(push,1)与#pragma pack(1)的区别
  9. 简述STL中容器适配器的概念
  10. 电精2(电神魔傀2) android版本下载
  11. 人工智能:博弈--人机中国象棋
  12. 【接口测试】接口测试用例设计
  13. Photoshop 安装 Topaz 滤镜
  14. 解密DB2独步江湖之五大法宝
  15. php网上商城作业,商城主体作业
  16. java.lang.IllegalArgumentException: Result Maps collection already contains value for ciis.zht.model
  17. php身份证注册判断重名,同名同姓测试,全国公民身份信息系统库查重名
  18. MATLAB中输出直观公式
  19. 2B青年答疑:什么是2B青年?如何脱离2B青年行列?
  20. Windows操作系统常见故障

热门文章

  1. 线性稳压电源和开关稳压电源
  2. CMS、G1垃圾收集器详解
  3. 计算机英语英语动宾短语,英语动宾短语解析
  4. TSP之动态规划找最优解
  5. php怎么获取html span标签的值_如何获取PHP中所有html元素的列表?
  6. 跨境追踪(ReID)多粒度网络(MGN)详解及代码实现(2)
  7. 35岁 学java_35岁没基础,现在去学java编程还来得及吗?应该注意哪些事项?
  8. Python自动化?软件测试工程师竟然用它干坏事!
  9. 如何将您的智能手机用作Amazon Fire TV遥控器
  10. 孙子定理(中国剩余定理)