例如,假设我有一个方法

double roundDown(double unrounded, double precision) {
}

roundDown(137.42973, 0.01) would return 137.42
roundDown(137.42973, 0.05) would return 137.4
roundDown(137.42973, 0.25) would return 137.25

是否有可以执行类似操作的库,否则算法是否相当简单?

最佳答案

将原始数字除以精度,四舍五入到最接近的整数,然后再次乘以精度:

double roundDown(double unrounded, double precision) {
    return precision * Math.floor(unrounded / precision);
}

请注意,固有的浮点数错误意味着您的电话号码可能并不完全是您要寻找的答案-例如您可能会得到137.399999,而不是137.4

10-08 08:40