ABAP的计算精度问题。

2020-09-21 15:27发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我遇到了一个关于...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我遇到了一个关于除法和乘法的问题。 请参阅以下Java代码。

p = a = 154.8,b = 37,c = 144。

双重d = b/c;

d = a * d;

" d"的结果是39.775

但是,我已经在ABAP中制作了一个类似的程序,请参见下文。

数据lv_decfloat34_1类型为decfloat34。
数据lv_decfloat34_2类型为decfloat34。
数据lv_decfloat34_3类型为decfloat34。
数据lv_decfloat34_4类型为decfloat34。

lv_decfloat34_1 =
lv_decfloat34_1。 。
lv_decfloat34_3 = 144.

lv_decfloat34_4 = lv_decfloat34_2/lv_decfloat34_3。
lv_decfloat34_4 = lv_decfloat34_1 * lv_decfloat34_4。<9999> 9999 9999

写入:lv_decfloat34_4。

数据lv_f_1类型f。
数据lv_f_2类型f。
数据lv_f_3类型f。
数据lv_f_4类型f。

lv_f_1 = '154.8'。
lv_f_2 = 37.
lv_f_3 = 144.

lv_f_4 = lv_f_2/lv_f_3。
lv_f_4 = lv_f_4 * lv_f_1。

*结果为3,9774999999999999E + 01

写入:lv_f_4。

数据lv_p_1(16)类型p DECIMALS 14.
数据lv_p_2(16)类型p DECIMALS 14.
数据lv_p_3(16)类型p DECIMALS 14. < br>数据lv_p_4(16)类型p DECIMALS 14.

lv_p_1 ='154.8'。
lv_p_2 = 37.
lv_p_3 = 144.

lv_p_4 = lv_p_2/lv_p_3。
lv_p_4 = lv_p_4 * lv_p_1。

*结果为39,77499999999931

写:lv_p_4。

我也用C ++做过类似的实验。 结果与JAVA相同。

由于客户正在使用Excel验证结果,结果为39.775,不等于我们的结果。 因此我们遇到了问题。 有人可以解决这个问题吗?

谢谢

Aicro

5条回答
三十六小时_GS
2020-09-21 15:56

根据SAP预定义的数据元素,Decfloat16可以有16个小数,而decfloat34可以有34个小数。

您可以使用3个十进制的包装类型P转换为所需的十进制格式。

以下是您可以使用的代码段。

 DATA lv_decfloat34_1 TYPE f。
 数据lv_decfloat34_2类型f。
 数据lv_decfloat34_3类型f。
 数据lv_decfloat34_4类型f。
 数据lv_decfloat34_5 TYPE p十进制数3。


 lv_decfloat34_1 ='154.8'.lv_decfloat34_2 = 37.lv_decfloat34_3 = 144。
 lv_decfloat34_4 = lv_decfloat34_2/lv_decfloat34_3.lv_decfloat34_4 = lv_decfloat34_1 * lv_decfloat34_4。
 lv_decfloat34_5 = lv_decfloat34_4

 写:lv_decfloat34_5。

一周热门 更多>