在 Java 中,我正在使用BigDecimal
该类,并且我的部分代码要求我从中提取小数部分。 BigDecimal
似乎没有任何内置方法可以帮助我获取 a 小数点后的数字BigDecimal
。
例如:
BigDecimal bd = new BigDecimal("23452.4523434");
我想4523434
从上面表示的数字中提取 。最好的方法是什么?
在 Java 中,我正在使用BigDecimal
该类,并且我的部分代码要求我从中提取小数部分。 BigDecimal
似乎没有任何内置方法可以帮助我获取 a 小数点后的数字BigDecimal
。
例如:
BigDecimal bd = new BigDecimal("23452.4523434");
我想4523434
从上面表示的数字中提取 。最好的方法是什么?
如果该值为负数,则 usingbd.subtract()
将返回错误的小数。
使用这个:
BigInteger decimal = bd.remainder(BigDecimal.ONE).movePointRight(bd.scale()).abs().toBigInteger();
它返回4523434
或23452.4523434
-23452.4523434
此外,如果您不希望小数部分右侧有多余的零,请使用:
bd = bd.stripTrailingZeros();
在前面的代码之前。
这是使用该方法的替代remainder()
方法:
BigDecimal bd = new BigDecimal("23452.4523434");
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger()));
此外,您可以尝试使用 abs() 方法来确保小数部分为正:
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger())).abs();
它不起作用!
BigDecimal d = BigDecimal.valueOf(23452.4523434);
BigInteger decimal =
d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
当您输入数字时,小数部分以“0”开头,例如。“123.00456”。你得到“456”而不是“00456”。发生这种情况是因为我们转换了它.toBigInteger()
,而第一个零就消失了;如果你使用.toString()
而不是.toBigInteger()
,你会得到 456.00000,这也是错误的!
所以我的建议是使用这个:
BigDecimal fractPart = bd.remainder(BigDecimal.ONE);
StringBuilder sb = new StringBuilder(fractPart.toString());
sb.delete(0, 2);
String str = sb.toString();
然后按照str
你想要的方式使用它