Java 提取BigDecimal中的数字小数

Java 提取BigDecimal中的数字小数,java,bigdecimal,Java,Bigdecimal,如何使用BigDecimal提取小数点后的数字 BigDecimal d=BigDecimal.valueOf(1548.5649) 结果:仅提取:5649尝试: 这应该可以做到: d.subtract(d.setScale(0, RoundingMode.FLOOR)); 将数字四舍五入到小数点后零位,并且不管其名称如何,都不会改变d的值。尝试使用d.doubleValue()获取双精度值您不知道结果需要哪种类型。最简单的方法可能是将BigDecimal转换为字符串,并获取子字符串: Str

如何使用BigDecimal提取小数点后的数字

BigDecimal d=BigDecimal.valueOf(1548.5649)

结果:仅提取:5649

尝试:


这应该可以做到:

d.subtract(d.setScale(0, RoundingMode.FLOOR));

将数字四舍五入到小数点后零位,并且不管其名称如何,都不会改变
d

的值。尝试使用
d.doubleValue()
获取双精度值

您不知道结果需要哪种类型。最简单的方法可能是将BigDecimal转换为字符串,并获取子字符串:

String s = d.toPlainString();
int i = s.indexOf('.');
if (i < 0) {
    return "";
}
return s.substring(i + 1);
String s=d.toPlainString();
int i=s.indexOf('.');
if(i<0){
返回“”;
}
返回s.子串(i+1);
试试:

印刷品:

5649

如果该值为负值,则使用
d.subtract(d.setScale(0,RoundingMode.FLOOR))
将返回错误的小数

使用这个

BigInteger decimal = 
                d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();

它返回
1548.5649
-1548.5649

5649
显示:1548.56490000000079671735875308513641357421875与其他主题一样,结果应该是“5649”而不是“0.5649”,这不是正确答案返回相同的数字:1548.5649注意:您应该使用
BigDecimal.valueOf(“1548.5649”)是因为
double
bigdecimic
之间的转换可能会导致奇怪的副作用。如果您需要精度,请避免使用
double
float
@AaronDigulla我想您指的是新的BigDecimal(“1548.5649”),因为没有BigDecimal.valueOf(String)方法。这只适用于使用。作为十进制分隔符。但是有些地区使用的是,@BetaRide:我知道,我说法语,这里使用逗号。但是BigDecimal.toPlainString()不支持区域设置。无论语言环境是什么,它都使用点作为十进制分隔符。
5649
BigInteger decimal = 
                d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();