[英]How do I use BigDecimal's setScale to get two digits precision
public class Dummy {
public static void main(String args[]) {
String x = "1.234.567,89 EUR";
String e = " EUR";
List<BigDecimal> totals = new ArrayList<BigDecimal>();
totals.add( new BigDecimal(x.replaceAll(" EUR","").replaceAll("\\.","").replaceAll(",",".")));
System.out.println(totals.get(0).add(new BigDecimal(0.10).setScale(3,0)));
}
}
使用当前代码,我得到1234567.991
并将其设置为setScale(2,0)
我得到1234568.00
我正在寻找的是1234567.99
。 有什么帮助吗?
采用
System.out.println(totals.get(0).add(new BigDecimal(0.10)
.setScale(2, BigDecimal.ROUND_HALF_UP)));
放出
1234567.99
我认为必须为此内置一个Java函数。 但是,否则,您可以使用简单的数学来做到这一点。
您可以将数字乘以100。然后使用Java的上限或下限功能。 然后将其除以100。您得到了想要的结果。
不使用
new BigDecimal(0.10)
这既不精确,也不具有2的精度/小数位数。但是请使用
new BigDecimal("0.10")
这样可以保持规模。
这将提供所需的输出。
如果您当时想使用double,则可以使用DecimalFormat,但使用bigdecimal setScale。
BigDecimal.valueOf(1234567.991).setScale(2, BigDecimal.ROUND_HALF_UP)
.doubleValue();
OUTPUT
1234567.99
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.