是否可以区分new BigDecimal(0D)
与install
?
答案 0 :(得分:8)
无法区分这一点,因为java.math.BigDecimal
只知道一个零(*)。它没有正零或负零的概念。
这是因为在内部,BigDecimal
使用BigInteger
,而BigInteger
也只有一个零概念。 BigInteger
表现为二进制补码整数,而二进制补码只有一个零。
请参阅BigInteger
来源中的此评论:
public class BigInteger extends Number implements Comparable<BigInteger> { /** * The signum of this BigInteger: -1 for negative, 0 for zero, or * 1 for positive. Note that the BigInteger zero <em>must</em> have * a signum of 0. This is necessary to ensures that there is exactly one * representation for each BigInteger value. */ final int signum
*:不完全准确,你可以有多个不同规模的零,只是没有不同的符号
答案 1 :(得分:1)
javadoc州:
BigDecimal
由任意精度整数非标定值和32位整数标度组成。因此
BigDecimal
所代表的数字的值是(unscaledValue×10 scale )。
由于零只有一个整数值,因此无法将“减零”表示为BigDecimal
。
在内部,BigDecimal
的标准实施使用BigInteger
来表示“未缩放的值”。虽然javadocs不将此实现细节作为规范的一部分,但上面引用的定义足以排除任何实现,其中有两个不同的正负零值。
当然可以有多个零值;例如0
和0.00
不相等。这来自BigDecimal::equals(Object)
的定义。