问题如下:
var
sum: Extended;
begin
sum := 0.0;
sum := sum + table1.FieldByName('aaa').AsFloat / (1 - table2.FieldByName('bbb').AsFloat / 100) * 3000;
end;代入数值也就是:
sum := 0.0 + 0.52269 / (1 - 2 / 100) * 30000;
实际用系统自带的计算器得到的值是:16000.714285714285714285714285714
可是在程序里面就变成只有6位小数位了,也就是16000.714286
我的数据集里面的字段是保留的6位小数,不会计算过后也是按6位来截取吧?这样算的话我后面那么多小数位全丢了,就不准确了,变量sum我用Real型也是这样,Extended类型不是可以保留19-20位小数吗?怎么会这样呢?各位大哥,有没有遇到过?怎么解决呀?
var
sum: Extended;
begin
sum := 0.0;
sum := sum + table1.FieldByName('aaa').AsFloat / (1 - table2.FieldByName('bbb').AsFloat / 100) * 3000;
end;代入数值也就是:
sum := 0.0 + 0.52269 / (1 - 2 / 100) * 30000;
实际用系统自带的计算器得到的值是:16000.714285714285714285714285714
可是在程序里面就变成只有6位小数位了,也就是16000.714286
我的数据集里面的字段是保留的6位小数,不会计算过后也是按6位来截取吧?这样算的话我后面那么多小数位全丢了,就不准确了,变量sum我用Real型也是这样,Extended类型不是可以保留19-20位小数吗?怎么会这样呢?各位大哥,有没有遇到过?怎么解决呀?
直接把数值代入程序里,也就是把:
sum := sum + table1.FieldByName('aaa').AsFloat / (1 - table2.FieldByName('bbb').AsFloat / 100) * 3000;
换成:
sum := 0.0 + 0.52269 / (1 - 2 / 100) * 30000;
结果会是科学计数法表示的值,为什么我用数据集字段的值来算,就自动给我截掉了呢?
是这样子的,用下面的代码计算:
var
sum: Extended;
begin
sum := 0.0;
sum := sum + table1.FieldByName('aaa').AsFloat / (1 - table2.FieldByName('bbb').AsFloat / 100) * 3000;
end;
其中:
table1.FieldByName('aaa').AsFloat = 0.52269
table2.FieldByName('bbb').AsFloat = 2
最后结果是:16000.714286可是我用计算器算:0.52269 / (1 - 2 / 100) * 3000;
结果就是:16000.714285714285714285714285714现在我的意思就是:程序里面算的它自动给我把后面的截掉了,怎么让系统不要截掉后面的数据啊?我用了下面的方法:
1、把数据集里面字段的精确改成38位30位小数再用上面的代码计算;
2、用一个Extended类型(该类型可以精确到19-20位小数)的变量,把0.52269赋给它,然后再用这个变量来参与计算,sum也是Extended类型;
3、用RoundTo(结果,-10)来取小数位这几种方法都试了,都不行,还是原来的6位不变。怎么回事呀?高手们求救!!!