BigDecimal使用带有前导零的整数文字进行初始化

时间:2015-07-18 00:01:52

标签: java bigdecimal

请帮助我理解以下代码,

    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。

1 个答案:

答案 0 :(得分:1)

问题不在于BigDecimal,而在于您传入的字面数字。当int字面值以0开头时,Java会将其解释为octal number

  

八进制数字由ASCII数字0后跟一个或多个以下划线散布的ASCII数字0到7组成,并且可以表示正整数,零或负整数。

这就是为什么000100产生64 - 100 8 是64的十进制。

十进制文字没有前导零,所以不要使用任何。

BigDecimal d = new BigDecimal(100);