double转int时精度不一致问题

来源:互联网 发布:vb打印输出九九乘法表 编辑:程序博客网 时间:2024/04/28 13:34
float和double类型的主要设计目的是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。float和double类型对于货币计算尤为不合适,因为要让一个float或者double精确地表示0.1(或者10的任何负数次方值)是不可能的,比如System.out.println(2.0-1.1)将会打印0.899999999999999,而不是你所希望的0.9,这种舍入错误产生的原因是浮点数实际上是用二进制系统实现的,而分数1/10在二进制系统中没有精确的表示,其道理就如同在十进制系统中无法精确表示1/3一样;再比如0.5在二进制系统中有精确表示,而0.55在二进制系统中没有精确表示。

 

如果定义 int a=(2.0-1.1)*100 

则 a=89

所以为了避免这个问题,另加上小数 如 a=(2.0-1.1)*100 +0.01

这样就可以使结果正确

统一有问题的数据:

int a = (123.3/100)*1000;

int a=(481.0/100)*100 + 0.01;
int a=(401.5/100)*1000;

等。。。。

0 0
原创粉丝点击