Der*_*air 154 javascript types rounding
我在这里错过了什么吗?
var someNumber = 123.456;
someNumber = someNumber.toFixed(2);
alert(typeof(someNumber));
//alerts string
Run Code Online (Sandbox Code Playgroud)
为什么不.toFixed()返回一个字符串?
我想将数字四舍五入到2位小数.
m93*_*93a 150
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.
Run Code Online (Sandbox Code Playgroud)
.
或者如果你想要一个类似本机的功能,你在这里:
Number.prototype.toFixedNumber = function(x, base){
var pow = Math.pow(base||10,x);
return Math.round(this*pow) / pow;
}
Run Code Online (Sandbox Code Playgroud)
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";
Run Code Online (Sandbox Code Playgroud)
.
我不喜欢jsperf那么多,这里有一个链接与使用转换的方法的比较(在其他答案中)和这一个:https :
//jsperf.com/rounding-a-number-2
Chr*_*ung 115
它返回一个字符串,因为0.1及其功率(用于显示小数部分)在二进制浮点系统中是不可表示的(至少不具有完全准确性).
例如,0.1实际上是0.1000000000000000055511151231257827021181583404541015625,0.01实际上是0.01000000000000000020816681711721685132943093776702880859375.(感谢您BigDecimal证明我的观点.:-P)
因此(没有十进制浮点或有理数字类型),将其输出为字符串是将其修剪为精确显示所需精度的唯一方法.
小智 110
我通过更改此问题解决了这个问题:
someNumber = someNumber.toFixed(2)
Run Code Online (Sandbox Code Playgroud)
......对此:
someNumber = +someNumber.toFixed(2);
Run Code Online (Sandbox Code Playgroud)
但是,这会将数字转换为字符串并再次解析,这将对性能产生重大影响.如果您关心性能或类型安全性,请检查其他答案.
sir*_*lot 23
为什么不用parseFloat?
var someNumber = 123.456;
someNumber = parseFloat(someNumber.toFixed(2));
alert(typeof(someNumber));
//alerts number
Run Code Online (Sandbox Code Playgroud)
Niz*_*zar 12
我通过使用JavaScript的Number()功能将其转换回数字来解决它
var x = 2.2873424;
x = Number(x.toFixed(2));
Run Code Online (Sandbox Code Playgroud)
可能来不及回答,但您可以将输出乘以 1 以再次转换为数字,这是一个示例。
const x1 = 1211.1212121;
const x2 = x1.toFixed(2)*1;
console.log(typeof(x2));Run Code Online (Sandbox Code Playgroud)
您可以简单地使用“+”将结果转换为数字。
var x = 22.032423;
x = +x.toFixed(2); // x = 22.03
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92820 次 |
| 最近记录: |