【发布时间】:2021-07-19 15:01:24
【问题描述】:
我可以理解,在 BigDecimals 中,2.0 不等于 2.00,因为 2.00 实际上使用了更精确的数字。我难以理解的是为什么2E+1 不被认为等于20,因为这两个数字实际上使用相同数量的精度数字。恕我直言,它们只是完全相同数字的不同表示。
我知道,我可以使用stripTrailingZeros 和compareTo 而不是equals,我只是对这背后的原因感兴趣。有人可以帮助我理解这一点吗?
【问题讨论】:
-
您认为
2E+1和20具有相同精度的假设是错误的。2E+1具有一位精度,而20具有两位精度。 -
compareToalone 按数值比较 BigDecimals,而不是equals。 -
@Pieter12345 20号有0位,2E+1有-1位。
-
@Michael 正确。但这是纯粹的技术点还是这些数字实际上有任何区别?
-
new BigDecimal("2E+1")的精度为 1,这意味着它可以代表任何数字 n,其中 20 new BigDecimal("20") 的精度为 2 和因此只能代表一个数字 x 其中 20
标签: java bigdecimal