-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[未知]如何判断 0.1 + 0.2 与 0.3 相等? #10
Comments
因为JavaScript使用IEEE浮点类型双精度。转换为二进制在计算但是小数无限延伸,二进制截取53位导致精度丢失。 |
主要涉及到 常用的 |
作为一道面试题,我觉得重要的是要讲出一点其他人一般不会答出来的深度。像这道题,可以从原理和解决方案两个地方作为答题点,最好在编一个案例。大致讲自己遇到过这个问题,于是很好奇深入研究了一下,发现是浮点数精度导致……原理怎样怎样……然后又看了业界的库的源码,然后怎样怎样解决。 关于原理,我专门写了一篇文章 mqyqingfeng/Blog#155 来解释,实际回答的时候,我觉得答出来
就已经 OK 了。 再讲解决方案,这个可以直接搜索到,各种方案都了解一下,比较一下优劣,还可以参考业界的一些库的实现,比如 math.js,不过相关的我并没有看过,后面我会研究一下。 如果还有精力的话,可以从加法再拓展讲讲超出安全值的数字的计算问题。 所以我觉得一能回答出底层实现,二能回答出多种解决方案的优劣,三能拓展讲出 bignum 的问题,就是一个非常完美的回答了。 |
/**
console.log(toFloatFixed(0.1 + 0.2) === 0.3); |
比如我们在做一些电商项目,涉及到金额这样子的小数运算,用这个方法也是没问题的吧? |
|
const floatAddEqual = (a,b,c) => ((a+b-c) < Number.EPSILON); |
No description provided.
The text was updated successfully, but these errors were encountered: