SAP ABAP 小数转分数\约分
导语:最近写报表的时候,顾问想把小数展示换城分数展示,例如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 小数转分数\约分相关推荐
- 小数点化分数的过程_分数和小数的互化
<分数和小数的互化>由会员分享,可在线阅读,更多相关<分数和小数的互化(3页珍藏版)>请在人人文库网上搜索. 1._五__年级__数学____备课组教案教师备课时间课时课题分数 ...
- 小数加分数怎样计算讲解_“分数,小数,百分数 的互化”我这样教学,学生很快就学会了。...
这部分知识千万不能忽视,用途可大了.我们在进行分数,小数,百分数 四则混合运算时,不会三者之间的转化,很难把题计算准确.那么三者之间怎样转化呢?其实就这么几步: 一,分数化小数,用分数的分子除以分数的 ...
- 小数点化分数的过程_怎么把小数化成分数
展开全部 小数化成分数的方法: 1.小数点前面的整数部分保持不变. 2.看是几位小数,就在1后面添几个0做分母: 3.把原来的小62616964757a686964616fe4b893e5b19e31 ...
- 分数化成有限小数的方法_分数化小数的方法|小数化分数题目
[www.520z-2.com - 话题作文] 小数由整数部分.小数部分和小数点组成.当测量物体时往往会得到的不是整数的数,古人就发明了小数来补充整数 小数是十进制分数的一种特殊表现形式.下面是小学生 ...
- 小数点化分数的过程_小学数学分数和小数互化知识点归纳
第1篇:小学数学分数和小数互化知识点归纳 1.小数化成分数:原来有几位小数,就在1的后面写几个零作分母,把原来的小数去掉小数点作分子,能约分的要约分. 2.分数化成小数:用分母去除分子.能除尽的就化成 ...
- 小数化分数 思路及代码模板 c++实现
小数化分数 将一个小数化成一个最简分数的模板,小数包含简单小数和循环小数. 对于循环小数的输入我们将循环体用括号括起来表示. 思路 首先我们将小数部分的数化为分数:对于整数部分我们只需要将化好的分子加 ...
- HNU程序设计-小数化分数
一.问题描述 二.问题分析及思路 小数化分数: 1.对于不循环小数,小数点后有i位,则分子为这i位数,分母为10的i次方,约分得到最简分数(除最大公约数) 2.对于只有循环的小数,分子为循环的部分(i ...
- 小数乘分数怎么算过程_小数乘分数如何计算?
(1)将分数化成小数,再按小数的乘法法则计算. 如0.21×1/2=0.21×0.5=0.105. (2)将小数化成分数,再按分数的乘法法则计算. 如0.32×3/5=32/100×3/5=8/25× ...
- 小数乘分数怎么算过程_小数乘以分数公开课教学设计
如何让学生在现实情景中体会和理解数学理念,丰富练习形式,加强计算与实际的应用联系,培养学生应用数学的意识和能力呢,以下是小编整理的<小数乘以分数公开课教学设计>,供您阅读,参考.希望对您有 ...
最新文章
- datatable 汇总_【2019 版】中国石油大学(北京)计算机考研信息、资料汇总
- 2019寒假作业二:PTA7-1币值转换
- java pattern用法_Java Pattern和Matcher用法
- 【Apache POI】基础处理方法总结
- mysql 读取comment_Mysql 获取表的comment 字段
- vc下禁止按钮连续点击的方法
- BasicAuth和OAuth
- #Pragma Pack(n)与内存分配 pragma pack(push,1)与#pragma pack(1)的区别
- 简述STL中容器适配器的概念
- 电精2(电神魔傀2) android版本下载
- 人工智能:博弈--人机中国象棋
- 【接口测试】接口测试用例设计
- Photoshop 安装 Topaz 滤镜
- 解密DB2独步江湖之五大法宝
- php网上商城作业,商城主体作业
- java.lang.IllegalArgumentException: Result Maps collection already contains value for ciis.zht.model
- php身份证注册判断重名,同名同姓测试,全国公民身份信息系统库查重名
- MATLAB中输出直观公式
- 2B青年答疑:什么是2B青年?如何脱离2B青年行列?
- Windows操作系统常见故障