float和double类型的主要设计目标是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。float和double类型对于货币计算尤为不合适,因为要让一个float或者double精确地表达0.1(或者10的任何其他负数次方值)是不可能的。
要想得到精确结果,用BigDecimal,int或者long进行计算。二进制无法精确表示浮点小数的小数部分,所以只能取近似值,而bigdecimal是一个java类,不单是一个简单类型,用它的方法可以做到更精确的计算
|