您可以将 javascript 中的数字四舍五入到小数点后的 1 个字符(正确四舍五入)吗?
我尝试了 *10, round, /10 但它在 int 的末尾留下了两位小数。
您可以将 javascript 中的数字四舍五入到小数点后的 1 个字符(正确四舍五入)吗?
我尝试了 *10, round, /10 但它在 int 的末尾留下了两位小数。
Math.round(num * 10) / 10
有效,这是一个例子......
var number = 12.3456789
var rounded = Math.round(number * 10) / 10
// rounded is 12.3
如果您希望它有一位小数,即使那是 0,也请添加...
var fixed = rounded.toFixed(1)
// fixed is always to 1 d.p.
// NOTE: .toFixed() returns a string!
// To convert back to number format
parseFloat(number.toFixed(2))
// 12.34
// but that will not retain any trailing zeros
// So, just make sure it is the last step before output,
// and use a number format during calculations!
使用这个原理,作为参考,这里有一个方便的小圆函数,它需要精确......
function round(value, precision) {
var multiplier = Math.pow(10, precision || 0);
return Math.round(value * multiplier) / multiplier;
}
... 用法 ...
round(12345.6789, 2) // 12345.68
round(12345.6789, 1) // 12345.7
... 默认四舍五入到最接近的整数(精度 0) ...
round(12345.6789) // 12346
...并可用于四舍五入到最接近的 10 或 100 等...
round(12345.6789, -1) // 12350
round(12345.6789, -2) // 12300
... 以及正确处理负数 ...
round(-123.45, 1) // -123.4
round(123.45, 1) // 123.5
...并且可以与 toFixed 结合使用以一致地格式化为字符串 ...
round(456.7, 2).toFixed(2) // "456.70"
var number = 123.456;
console.log(number.toFixed(1)); // should round to 123.5
我投票给toFixed()
,但是,为了记录,这是另一种使用位移将数字转换为 int 的方法。因此,它总是向零舍入(正数向下,负数向上)。
var rounded = ((num * 10) << 0) * 0.1;
但是,嘿,因为没有函数调用,所以速度非常快。:)
这是使用字符串匹配的一个:
var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2');
我不建议使用字符串变体,只是说。