我需要四舍五入一个双精度,因为它最后以 49 和 99 结尾,FX 数字 2138 应该四舍五入到 2149,数字 2150 应该四舍五入到 99,这使得数字 1-48 到 49,50-98 到 99我发现的一切都是关于将十进制四舍五入到 .99,它必须是双精度的,因为该值已经使用以下代码四舍五入到小数点后 0 位:
DecimalFormat decimalFormat = new DecimalFormat("#");
String fromattedDouble = decimalFormat.format(xxx);
您可以使用此方法:
public static int round(double value) {
value = Math.round(value);
return (int)(value-(value%50))+49;
}
测试用例
0 -> 49
25 -> 49
49 -> 49
50 -> 99
75 -> 99
99 -> 99
100 -> 149
2138 -> 2149
2150 -> 2199
48.5 -> 49
49.5 -> 99
50.5 -> 99
这应该可以做你想要的:
public static int round(int value) {
return ((value + 50) / 50 * 50) - 1;
}
您可以使用的一个技巧是将当前数字加倍,将其四舍五入到最接近的 100,然后除以 2:
int start = 2132; // 2132
start = start*2; // 4264
start = (start + 50) / 100 * 100; // (4264 + 50) / 100 * 100 = 4300
start = start / 2; // 2150
start = start - 1; // 2149
使用此逻辑:
2100 -> 2099
2132 -> 2149
2150 -> 2149
以下方法具有所需的效果:
static int round_to_49(int i) {
return ((i+50)/50*50)-1;
}
例子:
50: 99
46: 49
145: 149
154: 199