如何在 JavaScript 中舍入一个数字?.toFixed() 返回一个字符串?
2022-08-30 00:39:48
我在这里错过了什么吗?
var someNumber = 123.456;
someNumber = someNumber.toFixed(2);
alert(typeof(someNumber));
//alerts string
为什么返回字符串?.toFixed()
我想将数字四舍五入为2位小数位。
我在这里错过了什么吗?
var someNumber = 123.456;
someNumber = someNumber.toFixed(2);
alert(typeof(someNumber));
//alerts string
为什么返回字符串?.toFixed()
我想将数字四舍五入为2位小数位。
Number.prototype.toFixed
是一个函数,旨在在打印出数字之前格式化数字。它来自toString
,toExponential
和ToPrecision家族
。
要对数字进行四舍五入,请执行以下操作:
someNumber = 42.008;
someNumber = Math.round( someNumber * 1e2 ) / 1e2;
someNumber === 42.01;
// if you need 3 digits, replace 1e2 with 1e3 etc.
// or just copypaste this function to your code:
function toFixedNumber(num, digits, base){
var pow = Math.pow(base||10, digits);
return Math.round(num*pow) / pow;
}
.
或者,如果你想要一个“类似本机”的函数,你可以扩展原型:
Number.prototype.toFixedNumber = function(digits, base){
var pow = Math.pow(base||10, digits);
return Math.round(this*pow) / pow;
}
someNumber = 42.008;
someNumber = someNumber.toFixedNumber(2);
someNumber === 42.01;
//or even hexadecimal
someNumber = 0xAF309/256 //which is af3.09
someNumber = someNumber.toFixedNumber(1, 16);
someNumber.toString(16) === "af3.1";
但是,请记住,在编写模块时,污染原型被认为是不好的,因为模块不应该有任何副作用。因此,对于模块,请使用第一个函数。
我通过更改以下内容解决了这个问题:
someNumber = someNumber.toFixed(2)
...对此:
someNumber = +someNumber.toFixed(2);
但是,这会将数字转换为字符串并再次解析它,这将对性能产生重大影响。如果您关心性能或类型安全性,请同时查看其他答案。