java中如何从bigdecimal中获取精确的十进制值

java中如何从bigdecimal中获取精确的十进制值,java,java-8,Java,Java 8,我正在尝试获取BigDecimal值中小数点后的位数 BigDecimal big = new BigDecimal(1231235612.45); String[] str = big.toPlainString().split("\\."); System.out.println(" Decimal Value: " + str[1]); 使用这个,我得到以下输出- 十进制值:4500000476837158203125。 实际上,我只想按照原始的大十进制值(123123

我正在尝试获取BigDecimal值中小数点后的位数

BigDecimal big = new BigDecimal(1231235612.45);
    String[] str = big.toPlainString().split("\\.");

    System.out.println(" Decimal Value: " + str[1]);
使用这个,我得到以下输出- 十进制值:4500000476837158203125。 实际上,我只想按照原始的大十进制值(1231235612.45)显示45。 因此,我的预期输出是十进制值:45。 但是,在转换过程中,它会在小数点后添加更多的数字。
是否有任何方法或代码可以从BigDecimal获得完全相同的值

不要使用BigDecimal的双构造函数(请参阅Javadoc,这是不鼓励的)

使用字符串构造函数

new BigDecimal("1231235612.45");
或者使用MathContext

new BigDecimal(1231235612.45, MathContext.DECIMAL64);

长话短说:改用
字符串
构造函数。很可能您想要
BigDecimal.valueOf(1231235612.45)
新的大十进制(“1231235612.45”)
@Nilesh不使用双精度构造函数的原因是1231235612.45被放入一个64位双精度中,这个双精度不能用有限的位来精确表示,数字1231235612.4500000476837158203125是它能得到的最接近的数字。将该值更改一位将生成小于1235612.45的数字,但与所示数值相差不大。