如何解决在RPG中显示两位小数?
在声明浮点变量时,我不明白RPG中存储对象所需的精度??
在我的练习中,我输入了份数,例如值 5
。
总金额为 0.50 欧元,但我有喜欢的消息:
我不明白如何在 double 中正确声明变量 total
。
H
D Numbercopy S 3S 0
D Total S ???
*
/Free
dsply 'Enter your copy number please : ' '' Numbercopy;
If (Numbercopy < 11);
Total = Numbercopy * 0.10;
ElseIf (Numbercopy < 31);
Total = (10 * 0.10) + (Numbercopy - 10) * 0.09;
Else;
Total = (10 * 0.10) + (20 * 0.09) + (Numbercopy - 30) * 0.08;
EndIf;
dsply ('The amount is of ' + %Char(Total) + ' euros');
*inlr = *on;
/End-Free
这是我在 RPGPDM 上找到的。
D Float1 S 8F
https://www.rpgpgm.com/2014/02/defining-variables-in-rpg-all-free.html
解决方法
您已将 Float1 声明为“double”。但问题是浮点数不是固定十进制精度数的好选择。见https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems。
如果您正在处理需要正确精度而不仅仅是一些近似值的数字,您应该使用压缩或分区。
,在练习开始时说不要在 RPG 中使用 FLOAT。它会让你非常不开心。要回答您的问题:dcl-s total float(8);
您有两个浮动问题:
- 您不希望您的客户因为 1990 年的准确性问题而收到错误的发票。
- Decimals 也能够使用硬件支持来更快地进行评估,这并不“重要”但很好。
如果你想显示一个浮动,你可以做类似的事情
dcl-s outputString char(10) inz;
dcl-s total float(8) inz (5);
outputString = %char(%dec(total: 10: 2));
dsply outputString;
一些提示:
- 不要使用 /free 或 /end-free 编译器能够自行确认。
- 不要使用固定格式声明来定义您的字段。它们更难阅读,并且没有实际理由使用它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。