请帮助我理解以下代码,
BigDecimal d = new BigDecimal(000100);
System.out.println(d); // output is 64!!!!
BigDecimal x = new BigDecimal(000100.0);
System.out.println(x); // output is 100
在任何情况下,我们都不应该使用BigDecimal处理int或long值吗? (我的意思是关于性能和东西,我知道不建议使用BigDecimal只处理int或long)。我的数据混合了长值和小数值,所以我试图了解BigDecimal。
答案 0 :(得分:1)
问题不在于BigDecimal
,而在于您传入的字面数字。当int
字面值以0
开头时,Java会将其解释为octal number
八进制数字由ASCII数字0后跟一个或多个以下划线散布的ASCII数字0到7组成,并且可以表示正整数,零或负整数。
这就是为什么000100
产生64
- 100 8 是64的十进制。
十进制文字没有前导零,所以不要使用任何。
BigDecimal d = new BigDecimal(100);