如何使用BigDecimal的setScale获得两位数的精度

时间:2014-01-16 13:28:23

标签: java

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。有什么帮助吗?

4 个答案:

答案 0 :(得分:1)

使用

System.out.println(totals.get(0).add(new BigDecimal(0.10)
                                     .setScale(2, BigDecimal.ROUND_HALF_UP)));

Out put

1234567.99

答案 1 :(得分:0)

我认为必须有一个内置的Java函数。但除此之外,你可以用简单的数学来做到这一点。

您可以将数字乘以100.然后使用Java的ceiling或floor函数。然后将它除以100.你得到了你想要的结果。

答案 2 :(得分:0)

不要使用

new BigDecimal(0.10)

既是精确的,也不是2的精度/等级。 但是使用

new BigDecimal("0.10")

这保留了比例。

答案 3 :(得分:0)

这将提供所需的输出。

如果你想在那时使用double,我们可以使用DecimalFormat,但是使用bigdecimal setScale。

BigDecimal.valueOf(1234567.991).setScale(2, BigDecimal.ROUND_HALF_UP)
.doubleValue();

<强>输出

1234567.99