使用 BigDecimal 作为初学者而不是 Double?

Using BigDecimal as a beginner instead of Double?

提问人:Zohka 提问时间:7/18/2020 更新时间:7/18/2020 访问量:95

问:

我目前正在学习 Java,偶然发现了“BigDecimal”的用法。据我所知,“BigDecimal”更精确,因此建议使用它而不是普通的 Double。

我的问题是:我应该总是使用“BigDecimal”而不是 Double,因为它总是更好还是有一些缺点?对于初学者来说,切换到“BigDecimal”是否值得,或者只有在您有更多 Java 经验时才推荐使用?

Java 双精度 BigDecimal

评论

5赞 VGR 7/18/2020
BigDecimal 的性能要差得多。仅当您需要极高的精度时才使用它,例如在存储货币时。
0赞 SevvyP 7/18/2020
相同的问题
0赞 chrylis -cautiouslyoptimistic- 7/18/2020
因此,如果您需要精度,建议使用它。唯一典型的情况是金钱,你可能应该在那里使用类似 JMoney 的东西。
0赞 jwpol 7/18/2020
看看这个讨论 stackoverflow.com/questions/6320209/... double 具有一定的精度,bigdecimal 是表示数字的确切方式,除了 1/7、1/3 等。正如@VGR所说,BigDecimal 通常是为了钱

答:

2赞 Louis Wasserman 7/18/2020 #1

double每当您使用不需要完美精度的实数时,都应该使用。以下是一些常见示例:

  • 计算机图形学,有几个原因:很少需要精确的精度,因为很少有显示器的像素数超过四位数;此外,大多数三角函数仅适用于 和 ,而三角函数对于大多数图形工作至关重要floatdouble
  • 统计分析;平均值和标准差等指标通常最多比单个数据点的精度高一点
  • 随机性(例如),其中点不是特定位数;优先级是某些特定分布的实数Random.nextDouble()
  • 机器学习,其中正在学习乘法因子,不需要特定的十进制精度

对于像金钱这样的价值,在任何时候使用都是糟糕时光的秘诀。 通常应该用于金钱和其他任何您关心特定数量的十进制数字的地方,但它的性能较差,并且提供的数学运算较少。doubleBigDecimal

评论

1赞 rzwitserloot 7/18/2020
BigDecimal 应该总是用于赚钱吗?诺诺。通常,或应该使用,表示通常考虑用于交易的最小单位。从Satoshis(BTC)到欧洲美分到美元美分再到日元。BigDecimal 和 int/longs 都不能正确除法。当有理因素的一系列乘法完全发生在内部系统上时,BD变得有用,这是罕见的。intlong
1赞 Patricia Shanahan 7/21/2020
几乎任何测量物理量的处理,如长度和重量。除非所使用的算法条件异常差,否则测量误差将远大于舍入误差。double