Java 为什么BigDecimal.ZERO没有标度?
Java 为什么BigDecimal.ZERO没有标度?,java,biginteger,bigdecimal,zero,Java,Biginteger,Bigdecimal,Zero,BigDecimal.ZERO的Javadoc表示值0,刻度为0。顾名思义,BigDecimal.ZERO应该返回值0.0 我还知道这是BigDecimal.ZERO的编码方式: private static final BigDecimal zeroThroughTen[] = { new BigDecimal(BigInteger.ZERO, 0, 0, 1), new BigDecimal(BigInteger.ONE,
BigDecimal.ZERO
的Javadoc表示值0,刻度为0。顾名思义,BigDecimal.ZERO
应该返回值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
使用scale 0定义BigDecimal.ZERO
的优点是,由开发人员设置所需的比例。例如,始终可以使用不同的比例构造值为0的BigDecimal:
BigDecimal zero = BigDecimal.ZERO.setScale(2);
比例0提供了一个良好的默认值,并符合
让我们先承认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
将不相等(根据),因为它们的刻度不同:b
的刻度为0,b2
的刻度为1(因为返回一个BigDecimal
,其刻度为两个BigDecimal
s刻度中的最大值).我不知道你为什么认为BigDecimal.ZERO
应该是0.0
。为什么不0.00
或0.000
使用scale 0定义BigDecimal.ZERO
的优点是,由开发人员设置所需的比例。例如,始终可以使用不同的比例构造值为0的BigDecimal:
BigDecimal zero = BigDecimal.ZERO.setScale(2);
比例0提供了一个良好的默认值,并符合
让我们先承认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
将不相等(根据),因为它们的刻度不同:b
的刻度为0,b2
的刻度为1(因为返回一个BigDecimal
,其刻度为两个BigDecimal
s刻度中的最大值).为什么它应该是0.0
而不是0
或0.00
0.0
听起来像是一个相当随意的选择。零是零,所以只要0
(刻度为0)听起来是一个合理的默认值。你是正确的,那么为什么2个常量定义0呢?因为BigDecimal
和biginger
不仅仅是数字,它们是可以用来存储数字的特殊类,这些常量定义了一个值为零的BigDecimal
,以及一个值为零的biginger
。你为什么要问这个问题?坦率地说,无论你还是任何人认为当前的定义是错误的,这都没有区别。定义就是它是什么。向后兼容命令意味着它不会被更改。为了澄清这一点,我很好奇。为什么它应该是0.0
,而不是0
或0.00
0.0
听起来像是一个相当随意的选择。零是零,所以只要0
(刻度为0)听起来是一个合理的默认值。你是正确的,那么为什么2个常量定义0呢?因为BigDecimal
和biginger
不仅仅是数字,它们是可以用来存储数字的特殊类,这些常量定义了一个值为零的BigDecimal
,以及一个值为零的biginger
。你为什么要问这个问题?坦率地说,无论你还是任何人认为当前的定义是错误的,这都没有区别。定义就是它是什么。向后兼容性命令意味着它不会被更改。我只是想澄清一下,对此很好奇。我同意我认为它应该是0.0我同意我认为它应该是0.0