我必须计算一些浮点变量,我的同事建议我使用 BigDecimal
而不是 double
因为它会更精确。但我想知道它是什么以及如何充分利用 BigDecimal
?
原文由 Truong Ha 发布,翻译遵循 CC BY-SA 4.0 许可协议
我必须计算一些浮点变量,我的同事建议我使用 BigDecimal
而不是 double
因为它会更精确。但我想知道它是什么以及如何充分利用 BigDecimal
?
原文由 Truong Ha 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的英语不好,所以我会在这里写一个简单的例子。
double a = 0.02;
double b = 0.03;
double c = b - a;
System.out.println(c);
BigDecimal _a = new BigDecimal("0.02");
BigDecimal _b = new BigDecimal("0.03");
BigDecimal _c = _b.subtract(_a);
System.out.println(_c);
程序输出:
0.009999999999999998
0.01
还有人想用double吗? ;)
原文由 Basil 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
BigDecimal
是表示数字的精确方式。一个Double
有一定的精度。使用不同大小的双精度(比如d1=1000.0
和d2=0.001
)可能会导致0.001
在总和时一起下降,因为幅度差异如此之大。使用BigDecimal
这不会发生。The disadvantage of
BigDecimal
is that it’s slower, and it’s a bit more difficult to program algorithms that way (due to+
-
*
和/
没有过载)。如果您正在处理金钱,或者必须精确,请使用
BigDecimal
。否则Doubles
往往足够好。我确实建议阅读
BigDecimal
的 javadoc ,因为他们确实比我在这里做的更好:)