java中双精度乘法的准确性?
对于java中的double值,乘法运算符的保证精度是多少?
例如,2.2 * 100是220.00000000000003,但220是双数。 220.00000000000003是220后的下一个双倍。
乘法工作正常,但2.2
不能完全表示为double。 最接近的双打是:
- 2.199999999999999733(0x4001999999999999)
- 2.200000000000000177(0x400199999999999a)
有些软件会将后一个值打印为2.2
,但这并不意味着它是准确的。 这只是意味着它被视为“足够接近”。
如果您正在处理财务数据,请不要使用float or double
只需使用java.math.BigDecimal
你可以使用BigDecimal,但要确保使用BigDecimal(String)而不是BigDecimal(double)的构造。 他们之间的区别是: