有时在debug标准程序时发现有些数值的加减乘除计算不正常,和我们自己写的程序的结果不一致。调查了一下发现是程序属性中的固定点运算(Fixed point arithmetic)导致的。
看了一下F1,发现如果没有勾上这个则所有数字都作为正数来计算,这个导致了结果和我们预想的不一致。
写一个简单的程序说明一下:
没有勾上Fixed point arithmetic时,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
REPORT ztest_fix_poiont. DATA:l_result TYPE p DECIMALS 0, l_a TYPE p DECIMALS 1 VALUE '2.1', l_result1 TYPE p DECIMALS 1, l_result2 TYPE p DECIMALS 1. l_result = 100 / 2. * l_result 没有小数位,所以结果就是50 WRITE:/ 'l_result = ' , l_result. * l_result1有一位小数,结果自动由50变成5.0 l_result1 = 100 / 2. WRITE:/ 'l_result1 = ' ,l_result1. * l_a在四则运算中由2.1变成正数21,100 / 21 结果为4.8 向上取整变为5,自动由50变成5.0 * 又因为l_result2有一位小数,5.0进而变成0.5 l_result2 = 100 / l_a. WRITE:/ 'l_result2 = ' ,l_result2. |
运行结果,
正常如果勾上Fixed point arithmetic,程序运行结果,
以上。
发表评论