我在 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/