math.round 十进制数,以 0,2 到 1 位小数的部分表示



我正在尝试在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))