Rpgle 在RPG中显示双精度小数点后2位?
声明浮点变量时,我不了解RPG中存储对象所需的精度 在我的练习中,我输入份数,例如值Rpgle 在RPG中显示双精度小数点后2位?,rpgle,rpg,Rpgle,Rpg,声明浮点变量时,我不了解RPG中存储对象所需的精度 在我的练习中,我输入份数,例如值5 总金额为0.50欧元,但我有类似的信息: 我不明白如何用double正确声明变量total H D NumberCopy S 3S 0 D Total S ??? * /Free dsply 'Enter your copy number please : ' '' NumberCopy; I
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
您已将Float1声明为“double”。但问题是,对于固定十进制精度的数字来说,浮点数并不是一个好的选择。看
如果你使用的数字需要正确的精度,而不仅仅是近似值,那么你应该使用packed或zoned。在练习开始时,不要在RPG中使用FLOAT。这会让你很不开心。回答您的问题:
dcl-s总浮动(8)代码>浮动有两个问题:
你不希望你的客户因为1990年那样的准确性问题而收到错误的发票
小数也可以使用硬件支持来更快地评估,这不是“重要”而是一个很好的选择
如果你想显示一个浮动,你可以这样做
dcl-s outputString char(10) inz;
dcl-s total float(8) inz (5);
outputString = %char(%dec(total: 10: 2));
dsply outputString;
一些提示:
- 不要使用/free或/end free编译器能够自行确认tht
- 不要使用固定格式声明来定义字段。它们更难阅读,也没有实际的理由使用它们
既然您刚刚开始学习RPG,为什么不学习**免费RPG,而不是固定和免费的混合。而不是D Float1 S 8F
writedcl-S Float1 float(8)代码>
dcl-s outputString char(10) inz;
dcl-s total float(8) inz (5);
outputString = %char(%dec(total: 10: 2));
dsply outputString;