Nat*_*han 78 javascript math floating-point rounding
这是一个场景:我.9999999999999999
什么时候到达1.0
.
我可以承受丢失小数位的精度,所以我正在使用.toFixed(15)
,哪种工作.
四舍五入有效,但问题是我得到了1.000000000000000
.
有没有办法舍入到一些小数位,但剥去额外的空格?
注意:.toPrecision
不是我想要的; 我只想指定小数点后面的数字.
注2:我不能只使用,.toPrecision(1)
因为我需要保持小数点后实际有数据的数字的高精度.理想情况下,必要时会有尽可能多的小数位(最多15个).
Gus*_*Gus 133
>>> parseFloat(0.9999999.toFixed(4));
1
>>> parseFloat(0.0009999999.toFixed(4));
0.001
>>> parseFloat(0.0000009999999.toFixed(4));
0
Run Code Online (Sandbox Code Playgroud)
Nay*_*ish 33
是的,有一种方法.使用parseFloat()
.
parseFloat((1.005).toFixed(15)) //==> 1.005
parseFloat((1.000000000).toFixed(15)) //==> 1
Run Code Online (Sandbox Code Playgroud)
在这里查看一个实例:http://jsfiddle.net/nayish/7JBJw/
Jir*_*riz 18
据我所知,您想要删除通过您获得的字符串中的尾随零toFixed()
.这是一个纯字符串操作:
var x = 1.1230000;
var y = x.toFixed(15).replace(/0+$/, ""); // ==> 1.123
Run Code Online (Sandbox Code Playgroud)
小智 7
如果将返回值强制转换为数字,则那些尾随的零将被删除。这也没有那么冗长parseFloat()
。
+(4.55555).toFixed(2);
//-> 4.56
+(4).toFixed(2);
//-> 4
Run Code Online (Sandbox Code Playgroud)
这使用了一元+运算符,因此,如果将此用作字符串操作的一部分,则需要在其之前加上一个infix + :var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));
。仅供参考,字符串前面的一元+会将其转换为数字。来自MDN:一元+可:
转换整数和浮点数以及非字符串值true,false和null的字符串表示形式。支持十进制和十六进制(“ 0x”前缀)格式的整数。支持负数(尽管不支持十六进制)。如果它不能解析特定值,则它将评估为NaN。