繁体   English   中英

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

[英]String conversion of decimal in JavaScript (decimal to string)

你们能解释一下为什么 65.00 的string转换返回 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

因为这就是指定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"

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

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

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

你可以在这里看到:

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

使用固定:

var n2 = dec_2.toFixed(2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM