Java 提取BigDecimal中的数字小数
如何使用BigDecimal提取小数点后的数字 BigDecimal d=BigDecimal.valueOf(1548.5649) 结果:仅提取:5649尝试: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
这应该可以做到:
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”)相反,code>是因为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();