Double 与 BigDecimal?

新手上路,请多包涵

我必须计算一些浮点变量,我的同事建议我使用 BigDecimal 而不是 double 因为它会更精确。但我想知道它是什么以及如何充分利用 BigDecimal

原文由 Truong Ha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

BigDecimal 是表示数字的精确方式。一个 Double 有一定的精度。使用不同大小的双精度(比如 d1=1000.0d2=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 往往足够好。

我确实建议阅读 BigDecimaljavadoc ,因为他们确实比我在这里做的更好:)

原文由 extraneon 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题