java中的double在计算的时候会出现这样的情况。一般根据保留位进行舍入处理

解决方案 »

  1.   

    浮点数是不精确的。因为浮点数实际上是用二进制系统表示的。而分数1/10在二进制系统中没有精确的表示,就象在十进制系统中无法精确表示1/3一样。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。如上面的例子,应该写成这样System.out.println(BigDecimal.valueOf(20,1).subtract(BigDecimal.valueOf(11,1)));具体可以参考Java的帮助文档