将数字四舍五入到小数点后三位

问题描述

我正在使用这个功能

public static Double arrondi(Double number) {
    DecimalFormat df = new DecimalFormat("0.00");
    df.setRoundingMode(RoundingMode.UP);
    String localProportionAfterRound = df.format(number).replace(",",".");
    return Double.parseDouble(localProportionAfterRound);
}

如果第 3 个十进制数大于或等于 5,我想对数字进行四舍五入

有一些我想要的输出示例:

    arrondi(1941.8849999999998) ==> 1941.89 (1941.885 ==> 1941.89 **Correct**)
    arrondi(647.259) ==> 647.26 **Correct**
    arrondi(145.83333333333334) ==> 145.83 ( **Incorrect**,I got 145.84)

有没有办法做到这一点?我的函数应该总是接收一个双精度值并返回一个双精度值。

谢谢

解决方法

它可以通过这里实现,其中位置是您喜欢的小数位数。 在您的情况下,您将调用位置等于 2 的函数

public static double round(double value,int places) {
    if (places < 0) throw new IllegalArgumentException();

    BigDecimal bd = BigDecimal.valueOf(value);
    bd = bd.setScale(places,RoundingMode.HALF_UP);
    return bd.doubleValue();
}