繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM