我试图找到一种如何在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"
?
答案 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;
}