JavaScript中十进制的字符串转换(十进制到字符串)

时间:2020-08-21 10:30:19

标签: javascript

你们能解释一下为什么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

2 个答案:

答案 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.11.1000000000000000888178419700125232338905334472656250最终都是相同的位模式。因此,不需要多余的数字来将数字与下一个可表示的数字区分开。因此,他们被遗弃了。

您可以在这里看到

console.log(1.1 === 1.1000000000000000888178419700125232338905334472656250); // true

答案 1 :(得分:0)

用于修正:

var n2 = dec_2.toFixed(2)
相关问题