0

我想在 java 中将 6.23 的值增加到 6.25。现在我打算将双精度转换为字符串而不是使用拆分并取最后两位十进制数字并将它们转换为双精度。而不是使用 if() 条件。java中的任何函数可以为我做到这一点吗?还是有什么其他方式?

4

3 回答 3

1

如果您想在没有精度/舍入误差的情况下对货币进行操作,您可以使用BigDecimal. 为了四舍五入到一个整数,您必须调用divide()并将scale参数设置为 0...

BigDecimal precision = new BigDecimal("0.05")
BigDecimal value = new BigDecimal("6.23");
BigDecimal rounded = value.divide(precision, 0, BigDecimal.ROUND_UP).multiply(precision);
于 2012-12-04T09:34:51.783 回答
1
double value = 6.21;
value = value * 100;
value = Math.round((value + 2.5)/ 5.0) * 5.0;
value = value / 100;
System.out.println(value);
于 2012-12-04T09:35:47.670 回答
1

您可以除以 0.05(您的精度步长),四舍五入到最接近的整数,然后再次乘以 0.05:

BigDecimal precision = new BigDecimal("0.05");
BigDecimal value = new BigDecimal("6.23");
BigDecimal rounded = value.divide(precision, 0, RoundingMode.HALF_DOWN)
                          .multiply(precision);
System.out.println("rounded = " + rounded); //prints 6.25

然后,您可以在实用程序方法中提取它:

public class Test {

    private static final BigDecimal PRECISION = new BigDecimal("0.05");

    public static void main(String[] args) {
        BigDecimal value = new BigDecimal("6.23");
        System.out.println("value = " + value + " / rounded = " + roundCurrency(value));
        value = new BigDecimal("6.22");
        System.out.println("value = " + value + " / rounded = " + roundCurrency(value));
        value = new BigDecimal("6.20");
        System.out.println("value = " + value + " / rounded = " + roundCurrency(value));
        value = new BigDecimal("6.19");
        System.out.println("value = " + value + " / rounded = " + roundCurrency(value));
    }

    public static BigDecimal roundCurrency(BigDecimal value) {
        return value.divide(PRECISION, 0, RoundingMode.HALF_DOWN)
                    .multiply(PRECISION);
    }
}
于 2012-12-04T09:44:25.157 回答