如何舍入到最接近的0.05?

时间:2014-05-06 14:06:28

标签: java rounding

我试图找到一种如何在java中舍入到最接近的0.05的方法。让我们说我有以下数字:

0.33
0.02
0.874
0.876

这应该成为:

0.35
0.00
0.85
0.90

我尝试了很多东西,我只能使用BigDecimal将它放到逗号后面的n个位置,但我似乎无法为此找到一种方法。

有人可以帮助我吗?

编辑:感谢您的帮助,我很惊讶这可以轻松完成。如何将双重转换为正确的字符串?我无法使用Double.toString(double d),因为例如字符串将是"0.9"而不是"0.90"

4 个答案:

答案 0 :(得分:2)

0.05 == 1/20,对吗?因此,你需要的只是最接近的数字除以1/20,所以,你可以将这个数乘以20,得到最接近的数除以1,然后得到最初的数字。

TL; DR:你可以将它乘以20,然后再将它除以20:

public double customRound(double num) {
    return Math.round(num * 20) / 20.0;
}

答案 1 :(得分:2)

一种简单的方法是:

double d = 0.33;
double roundedTimes20 = Math.round(d * 20);
double rounded = roundedTimes20 / 20; //0.35

但请注意,生成的double不一定是舍入数字的精确表示(通常的浮点警告),并且方法 假设您的原始双倍时间20可以适合长

答案 2 :(得分:1)

您可以使用String.format将值格式化为String

String s = String.format("%.2f", 0.9);

答案 3 :(得分:0)

尝试一个功能:

    public static double round05(double num) {
            return Math.round(num * 20) / 20.0;
    }