javascript - 如何使用循环在javascript中将数字增加0.01?

标签 javascript math for-loop floating-point

问题

我试图在控制台中以米为单位构建一个高度列表,从 1.20m 开始,到 2.50m 结束。

我使用了这段代码:

var heights = [];
for ( var i=1.20, l=2.5; i<l; i+=0.01 ){

    heights.push(i);

}

heights = heights.join('\n');

如果我 console.log( heights ) 我得到:

1.2
1.21
1.22
1.23
...

但是在 1.37 我开始得到:

1.37
1.3800000000000001
1.3900000000000001
1.4000000000000001
1.4100000000000001
1.4200000000000002
1.4300000000000002

问题

  • 发生了什么事?
  • 如何修复它?

演示

var heights = [];
for ( var i=1.20, l=2.5; i<l; i+=0.01 ){

    heights.push(i);

}

var heights = heights.join('\n');

document.querySelector('#output').innerText = heights;
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <div id="output"></div>
</body>
</html>

最佳答案

你做得很好。问题在于 float 的不准确。

Why are floating point numbers so inaccurate?

如果您想显示此号码,请使用:

heights[i].toFixed(2);

请注意,toFixed() 返回一个字符串,如果您想执行更多数值运算,则必须转换回 float (parseFloat())。

关于javascript - 如何使用循环在javascript中将数字增加0.01?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19290628/

相关文章:

javascript - PHP音乐播放/暂停按钮

math - 有没有一种更优雅的方法来计算x =(y/n)+(y%n?1 : 0) ?

javascript - 使用 javascript 更改 flexbox 中的 CSS 样式

javascript - Chart JS 日期-小时 AxesX

JavaScript 未在 HTML 中运行

java - 迭代枚举元素以创建新对象时出现不兼容类型错误

java - 对于增量java问题

c++ - 优化毕达哥拉斯 SQRT()

无法让标准差在 C 中工作

for-loop - 我的逻辑哪里错了?