Skip to content

数字精度问题 #22

@yan647

Description

@yan647

1、为什么会有数字精度问题的存在?

在转换为二进制的科学记数法的形式时只保留64位有效的数字,此时只能模仿十进制进行四舍五入了,但是二进制只有 0 和 1 两个,于是变为 0 舍 1 入。在这一步出现了错误,那么一步错步步错,那么在计算机存储小数时也就理所应当的出现了误差。这即是计算机中部分浮点数运算时出现误差,这就是丢失精度的根本原因

2、什么情况下会有精度问题?什么情况下不会有精度问题?

出现精度问题的情况:

浮点数精度问题,比如 0.1 + 0.2 !== 0.3

大数精度问题,比如 9999 9999 9999 9999 == 1000 0000 0000 0000 1

toFixed 四舍五入结果不准确,比如 1.335.toFixed(2) == 1.33

其中大数精度问题可以通过BigInt类型来解决

3、如何解决?

4、我实际使用的例子:

分转元

参考

(JavaScript 中精度问题以及解决方案)[https://www.runoob.com/w3cnote/js-precision-problem-and-solution.html]

https://segmentfault.com/a/1190000021684144

https://zhuanlan.zhihu.com/p/100353781

(定点数和浮点数)[https://segmentfault.com/a/1190000024485146]

https://juejin.cn/post/6844903601601511431

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/BigInt

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions