[quote=引用 5 楼 boyingyou 的回复:] [quote=引用 2 楼 wlwlwlwl015 的回复:] java采用的是二进制系统,所以浮点数运算有时没法得到精确值,还记得十进制的小数位转二进制吧,就是这个道理,就像十进制没法精确表示1/3一样,所以如果运算需要精确值,就用BigInteger或者BigDecimal。
System.out.print(2.0f - 1.1f); // 正常。 System.out.print(2.0d - 1.1d); // 不正常。
System.out.println(new BigDecimal(2.0-1.1).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
[quote=引用 2 楼 wlwlwlwl015 的回复:] java采用的是二进制系统,所以浮点数运算有时没法得到精确值,还记得十进制的小数位转二进制吧,就是这个道理,就像十进制没法精确表示1/3一样,所以如果运算需要精确值,就用BigInteger或者BigDecimal。
所以嘛,我很好奇C#是怎么做到的,神奇啊...
java采用的是二进制系统,所以浮点数运算有时没法得到精确值,还记得十进制的小数位转二进制吧,就是这个道理,就像十进制没法精确表示1/3一样,所以如果运算需要精确值,就用BigInteger或者BigDecimal。
java中double型是非精确存储的,说白了,存的可能是近似值 两个近似值相减,得到的就是近似值了 可以使用BigDecimal 进行精确运算
81,091
社区成员
341,719
社区内容
加载中
试试用AI创作助手写篇文章吧