首页 > 解决方案 > JavaScript中十进制的字符串转换(十进制到字符串)

问题描述

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

标签: javascript

解决方案


因为这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);


¹ 即使实际数值(如果完整打印)上会有更多的非零数字也是如此。规范中的全部细节,它实际上是一个相当复杂的过程,是重要的学术研究的主题。

例如,考虑数字1.1

console.log(String(1.1)); // "1.1"

很简单,对吧?除了1.1不能在JavaScript 使用的IEEE-754 双精度浮点数类型中精确表示。当您在代码中使用时,创建的数值比 1.1略高:1.1

console.log((1.1).toFixed(52)); // "1.1000000000000000888178419700125232338905334472656250"

默认toString不包含这些数字的原因是它们不重要。两者1.11.1000000000000000888178419700125232338905334472656250最终成为数字中的相同位模式。因此,不需要这些额外的数字来区分该数字与下一个可表示的数字。所以他们被排除在外。

你可以在这里看到:

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


推荐阅读