我正在尝试在javascript中将一个数字四舍五入为0.2(或其他变量(的部分
我有一个数字 1.34,我想出去的是 1.2
这意味着该数字需要向下舍入到1个小数点,并分成0.2(?(的部分。
math.round((1.34 * 10) / 10) = 1.3
但是我如何将其变成 1.2,它应该始终向下舍入到最接近的 0.2
只需将数字除以您想要的精度,将结果相乘,然后乘以相同的数字。
function round(accuracy, number) {
if (accuracy <= 0) throw Error("Invalid Accuracy");
if (accuracy < 1) { // less chance of rounding error
accuracy = 1 / accuracy;
return Math.floor(number * accuracy) / accuracy;
}
return Math.floor(number / accuracy) * accuracy;
}
var smallRounding = round.bind(null, .2);
var largeRounding = round.bind(null, 5);
console.log("Rounding down to 0.2:");
console.log("1.2 => " + smallRounding(1.2));
console.log("1.25 => " + smallRounding(1.25));
console.log("1.3 => " + smallRounding(1.3));
console.log("1.35 => " + smallRounding(1.35));
console.log("1.4 => " + smallRounding(1.4));
console.log("Rounding down to 5:");
console.log("2 => " + largeRounding(2));
console.log("4 => " + largeRounding(4));
console.log("6 => " + largeRounding(6));
console.log("8 => " + largeRounding(8));
console.log("10 => " + largeRounding(10));
由于 JavaScript 存储分数的方式,当精度小于 1 时,执行Math.floor(1.25 * (1 / accuracy)) / (1 / accuracy)
比Math.floor(1.25 / accuracy) * accuracy
更安全。
console.log(Math.floor(1.25 / 0.2) * 0.2);
console.log(Math.floor(1.25 * (1 / 0.2)) / (1 / 0.2));
您可以将该值除以给定的插槽大小和下限,然后将该值乘以插槽。
由于浮点运算的问题,结果可能不如预期准确。
var value = 1.34,
slot = 0.2,
result = (Math.floor(value / slot) * slot).toFixed(2);
console.log(result);
简单Math.floor(x / 0.2) * 0.2
.
你可以试试这个:
Number((Math.floor(1.34 / 0.2) * 0.2).toFixed(1))