gpt4 book ai didi

java - 我们可以使用 double 存储货币字段并使用 BigDecimal 进行算术运算吗?

转载 作者:搜寻专家 更新时间:2023-10-31 08:10:18 26 4
gpt4 key购买 nike

我知道 double/float 的问题,建议使用 BigDecimal 而不是 double/float 来表示货币字段。但是 double/float 更有效并且更节省空间。那么我的问题是:在 Java 类中使用 double/float 来表示货币字段是可以接受的,但是使用 BigDecimal 来处理算术(即在任何算术之前将 double/float 转换为 BigDecimal)和相等检查?

原因是为了节省一些空间。我确实看到很多项目都在使用 double/float 来表示货币字段。

这有什么陷阱吗?提前致谢。

最佳答案

不,你不能。

假设 double 足以存储两个值 xy。然后将它们转换为安全的 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);

结果:

1.234567891234E12          //precise 'x'
1.234567891234E12 //precise 'y'
1524157878065965654042756 //precise 'x * y'
1.5241578780659657E24 //loosing precision

xy 以及使用 BigDecimal 的乘法都是准确的。然而,在转换回 double 后,我们丢失了最低有效数字。

关于java - 我们可以使用 double 存储货币字段并使用 BigDecimal 进行算术运算吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8400032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com