你们能解释一下为什么string
的65.00转换返回65而不是65.00吗?
var dec_1 = 65.01;
var dec_2 = 65.00;
var n1 = String(dec_1); // returns 65.01
var n2 = String(dec_2); // returns 65
答案 0 :(得分:3)
因为这就是指定Number.prototype.toString
起作用的方式。它只需要将小数点后的数字与另一个可表示的数字区分开即可。¹
如果要固定数量的小数位数,请使用toFixed
:
var dec_1 = 65.01;
var dec_2 = 65.00;
var n1 = dec_1.toFixed(2); // "65.01"
var n2 = dec_2.toFixed(2); // "65.00"
console.log(n1);
console.log(n2);
¹这是正确的,即使实际数字值(如果打印完整)在其上面会有更多的非零数字。 the specification中的全部详细信息,实际上是一个相当复杂的过程,是重要学术研究的主题。
例如,考虑数字1.1
:
console.log(String(1.1)); // "1.1"
很简单,对吧? 1.1
不能用JavaScript使用的IEEE-754 double-precision floating point数字类型精确表示。当您在代码中使用1.1
时,创建的数字值比<1.1>稍高 :
console.log((1.1).toFixed(52)); // "1.1000000000000000888178419700125232338905334472656250"
默认toString
不包含这些数字的原因是它们并不重要; 1.1
和1.1000000000000000888178419700125232338905334472656250
最终都是相同的位模式。因此,不需要多余的数字来将数字与下一个可表示的数字区分开。因此,他们被遗弃了。
您可以在这里看到
console.log(1.1 === 1.1000000000000000888178419700125232338905334472656250); // true
答案 1 :(得分:0)
用于修正:
var n2 = dec_2.toFixed(2)