在Java中,我正在使用BigDecimal
该类,我的部分代码要求我从中提取小数部分. BigDecimal
似乎没有任何内置的方法来帮助我获得小数点后的数字BigDecimal
.
例如:
BigDecimal bd = new BigDecimal("23452.4523434");
Run Code Online (Sandbox Code Playgroud)
我想4523434
从上面提到的数字中提取出来.最好的方法是什么?
Tay*_*mon 86
我会试试bd.remainder(BigDecimal.ONE)
.
BigDecimal bd = new BigDecimal( "23452.4523434" );
BigDecimal fractionalPart = bd.remainder( BigDecimal.ONE ); // Result: 0.4523434
Run Code Online (Sandbox Code Playgroud)
Iva*_*nRF 13
如果值为负,则使用bd.subtract()
将返回错误的小数.
使用这个:
BigInteger decimal =
bd.remainder(BigDecimal.ONE).movePointRight(bd.scale()).abs().toBigInteger();
Run Code Online (Sandbox Code Playgroud)
它返回4523434
的23452.4523434
或-23452.4523434
此外,如果您不想在小数部分的右侧添加额外的零,请使用:
bd = bd.stripTrailingZeros();
Run Code Online (Sandbox Code Playgroud)
在上一个代码之前.
这是使用该remainder()
方法的替代方法:
BigDecimal bd = new BigDecimal("23452.4523434");
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger()));
Run Code Online (Sandbox Code Playgroud)
此外,您可以尝试使用abs()方法来确保小数部分是正数:
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger())).abs();
Run Code Online (Sandbox Code Playgroud)
小智 6
这不起作用!
BigDecimal d = BigDecimal.valueOf(23452.4523434);
BigInteger decimal =
d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
Run Code Online (Sandbox Code Playgroud)
当您输入数字时,哪个小数部分以“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();
Run Code Online (Sandbox Code Playgroud)
然后按照str
你想要的方式使用它
归档时间: |
|
查看次数: |
29487 次 |
最近记录: |