BigDecimal.ZERO
的 Javadoc 说值 0,小数位数为 0。
顾名思义,BigDecimal.ZERO
code> 应该返回值 0.0
我也知道 BigDecimal.ZERO
的编码方式:
private static final BigDecimal zeroThroughTen[] = {
new BigDecimal(BigInteger.ZERO, 0, 0, 1),
new BigDecimal(BigInteger.ONE, 1, 0, 1),
...
}
// Constants
/**
* The value 0, with a scale of 0.
*
* @since 1.5
*/
public static final BigDecimal ZERO =
zeroThroughTen[0];
我不明白为什么在 Java 中决定 BigDecimal.ZERO
返回未标定的零而不是返回十进制零(至少默认标度为 1,即 0.0
).
需要什么 BigDecimal.ZERO
和 BigInteger.ZERO
都返回值 0
小数位数 0
?
最佳答案
我不知道为什么你认为 BigDecimal.ZERO
应该是 0.0
。为什么不是 0.00
或 0.000
?
用 0 标度定义 BigDecimal.ZERO
的好处在于,开发人员可以自行设置所需的标度。例如,您始终可以构造一个具有不同标度的值为 0 的 BigDecimal:
BigDecimal zero = BigDecimal.ZERO.setScale(2);
比例 0 提供了一个很好的默认值并遵守 principle of least astonishment .
让我们暂时承认 BigDecimal.ZERO
被定义为 0.0
。考虑以下代码:
BigDecimal b = new BigDecimal("20");
BigDecimal b2 = new BigDecimal("20").add(BigDecimal.ZERO);
System.out.println(b.equals(b2)); // false ??? since when 20 != 20 + 0 ??
b
和 b2
不会相等(根据 BigDecimal.equals
),因为它们会有不同的比例:b
会有比例0 和 b2
的比例为 1(因为 add
返回一个 BigDecimal
,其比例是两个 BigDecimal
比例的最大值).
关于java - 为什么 BigDecimal.ZERO 是未缩放的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760661/