JavaScript 舍入问题

标签 javascript

我在 Javascript 中遇到了一个奇怪的数学/舍入问题。

下面的代码片段是我正在运行的代码的一个非常基本的示例。显然这不是这个确切的代码,但我从文本框中取出一个十进制值,计算出一个百分比并将其从一个中取出。

var ten = "10";
var eight = "8";

alert(1 - (eight/ten));

问题是答案是 0.2,但计算返回 0.1999999999999996。然而,如果我执行 1 + (8/10) 1.8,则会返回。这是怎么回事?

最佳答案

欢迎来到 float 的世界!

计算机实际上并不处理十进制数——即以十为基数的数字,我们在日常生活中使用它们的方式。它们使用二进制数,其中包括 float 。它们也以二进制表示,这意味着“小数位数”并不总是 float 的有意义的属性。

例如, float 不能精确表示 0.1,如果您尝试在代码中使用它,您将得到类似 0.1000000001 的结果。您获得的确切值因实现而异,并且无法通过减去差异来校正,因为计算机无法判断是否存在差异 - 差异尽可能接近 0.1。

(这个答案的大部分内容是从我的 previous 答案中窃取的。)

关于JavaScript 舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041816/

相关文章:

javascript - 组件确实更新并始终返回相同的 Prop 和状态

javascript - 如何使用 Node/Electron 桌面应用程序从 API 中提取新数据?

javascript - 在 Javascript 中关闭模态框

javascript - 将标签粘贴在输入字段中,输入时不会改变。 (无占位符)。 HTML/JS/JQuery

javascript - 如何让按钮点击后转到页面的某个部分?

javascript - 在合作伙伴网站上添加 JavaScript 以在不知道客户 FTP 凭据的情况下提供客户聊天支持和销售跟踪?

javascript - 如何使用 Javascript 将数组中的数据设置为表单元素的值

javascript - Google map 标记的循环问题

javascript - 您可以在 Flash 实例之间传递 Camera 和 Microphone 对象吗?

javascript - Raphael/Mapael - 由单一图例控制的地 block 和区域