我知道 double/float 的问题,建议使用 BigDecimal 而不是 double/float 来表示货币字段。但 double/float 更有效且节省空间。那么我的问题是:
在 Java 类中使用 double/float 来表示货币字段是可以接受的,但是使用 BigDecimal 来处理算术(即在任何算术之前将 double/float 转换为 BigDecimal)和相等检查?
原因是为了节省一些空间。我确实看到很多项目都使用 double/float 来表示货币领域。
这有什么陷阱吗?
提前致谢。
不,你不能。
Suppose double
足以存储两个值x
and y
。然后你将它们转换为安全的BigDecimal
并多个它们。结果是准确的,但是如果将乘法结果存储回double
,您很可能会失去精度。证明:
double x = 1234567891234.0;
double y = 1234567891234.0;
System.out.println(x);
System.out.println(y);
BigDecimal bigZ = new BigDecimal(x).multiply(new BigDecimal(y));
double z = bigZ.doubleValue();
System.out.println(bigZ);
System.out.println(z);
Results:
1.234567891234E12 //precise 'x'
1.234567891234E12 //precise 'y'
1524157878065965654042756 //precise 'x * y'
1.5241578780659657E24 //loosing precision
x
and y
是准确的,以及使用乘法BigDecimal
。然而在投射回double
我们失去了最低有效数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)