这个问题涉及到,浮点数在计算机的存储方式的问题。
计算机不识别十进制数,他只认识0,1
具体的我给你推荐篇博文吧 http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
也就是说用只能Math.Round来忽略误差或者用decmial来提高精度了
@Natural Q:
如果对精度,没那么高的要求。就用Math.Round吧
decimal a = 0.29m
这样的计算方式就是精确的。
dobule和float 比如1.0 在计算机中可能表现为0.9999999999999999999或者是 1.000000000000001
这2种形式
这里也有一个关于计算误差的解决方案.
http://www.cnblogs.com/fumj/archive/2012/12/01/2797588.html
在金额使用的话:用decimal 比较。。小数点后几位 你可以按位截取的
普通的应用:应用Double Double也是可以截取的
如果计算金额的话,你用decimal比较准确,这个是浮点数,在计算机的存储方式的形式只识别0,1,或者用Math.Round来忽略误差值
精度不同,导致的。
要想不损失,
用Java的BigInteger
double是32位,你输出的时候是int型,是16位的,当然会有精度丢失了。上面的都不知道在扯些什么蛋。