四舍五入双倍到 49,没有十进制 Java



我需要四舍五入一个双精度,因为它最后以 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

最新更新