`
javamore
  • 浏览: 63583 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JavaScript浮点运算问题分析与解决

阅读更多

JavaScript 只有一种数字类型Number,而且在Javascript中所有的数字都是以IEEE-754(http://zh.wikipedia.org/zh-cn/IEEE_754)标准格式表示的。

浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的:

十进制           二进制

0.1              0.0001 1001 1001 1001 ...

0.2              0.0011 0011 0011 0011 ...

0.3              0.0100 1100 1100 1100 ...

0.4              0.0110 0110 0110 0110 ...

0.5              0.1

0.6              0.1001 1001 1001 1001 ...

 

所以比如1.1,其程序实际上无法真正的表示1.1,而只能做到一定程度上的准确,这是无法避免的精度丢失:

1.09999999999999999 


在JavaScript中问题还要复杂些,这里只给一些在Chrome中测试数据:

 输入                      输出

1.0-0.9 == 0.1     False

1.0-0.8 == 0.2     False

1.0-0.7 == 0.3     False

1.0-0.6 == 0.4     True

1.0-0.5 == 0.5    True

1.0-0.4 == 0.6    True

1.0-0.3 == 0.7    True

1.0-0.2 == 0.8    True

1.0-0.1 == 0.9    True

那如何来避免这类 1.0-0.9 != 0.1 的非bug型问题发生呢?

下面给出一种目前用的比较多的解决方案:

在判断浮点运算结果前对计算结果进行精度缩小,因为在精度缩小的过程总会自动四舍五入;

(1.0-0.9).toFixed(digits)     toFixed() 精度参数须在 0 与20 之间

如   (1.0-0.9).toFixed(10)==0.1  ,结果为True 

 

http://thoughtscript.appspot.com/javascript-float-computing-problem

分享到:

相关推荐

    Javascript 浮点运算的问题分析与解决方法

    JavaScript中的浮点运算问题主要源于数字类型(Number)的表示方式,这是由IEEE-754标准决定的。在计算机科学中,浮点数并非总是精确的,尤其是当它们以二进制形式存储时。例如,十进制的小数0.1、0.2或0.3在二进制下...

    Javascript 浮点运算精度问题分析与解决

    ### Javascript 浮点运算精度问题分析与解决 #### 知识点一:浮点数精度问题的普遍性 首先需要明确的是,浮点运算精度问题并不仅仅存在于JavaScript中,这实际上是计算机科学中的一个普遍问题。原因在于计算机使用...

    js中浮点型运算BUG的解决方法说明

    总结来说,这些函数通过以下步骤解决了JavaScript中浮点运算的精度问题: 1. 分析输入数值的小数部分位数。 2. 如果需要,调整数值的位数,使其具有相同的精度。 3. 使用整数运算代替浮点数运算,以避免浮点数误差...

    廖雪峰 JavaScript Python2.7/3 Git 教程(PDF,EPUB)

    6. **异步编程**:包括回调函数、Promise和async/await,用于解决JavaScript的非阻塞执行问题。 7. **AJAX**:实现页面无刷新的数据交换,提升用户体验。 8. **ES6及新特性**:如let和const、模板字符串、箭头函数...

    js处理浮点算法

    通过以上代码,我们可以有效地解决JavaScript中的浮点数运算不精确的问题。这些函数通过将浮点数转换为整数进行运算,然后再还原回浮点数的方式,避免了直接对浮点数进行操作所带来的误差。这种方法虽然较为繁琐,但...

    解析四则运算

    整数和浮点数的混合运算可能导致类型提升,即整数被转换为浮点数以进行浮点运算。例如,在JavaScript中,`2 + 3.5`会将整数2转换为浮点数,结果为`5.5`。 3. **溢出问题**:在处理整数运算时,如果运算结果超出了...

    JavaScript解决浮点数计算不准确问题的方法分析

    本文实例讲述了JavaScript解决浮点数计算不准确问题的方法。分享给大家供大家参考,具体如下: 最近在学习electron框架,想利用这个框架做一个简单的计算器demo。当我对小数进行运算时,发现了一个问题。 0.1+0.2=? ...

    DDA和Bresenham两种算法绘制直线

    Bresenham算法则是为了解决DDA算法中的浮点运算问题而设计的。它基于错误累积的思想,通过整数运算来近似直线。Bresenham算法的基本步骤如下: 1. 同样,确定起点(x1, y1)和终点(x2, y2),并计算dx和dy。 2. 判断...

    decimaljsJavaScript的任意精度Decimal类型

    Decimal.js 是一个专门为JavaScript设计的高精度数字计算库,它主要解决了JavaScript中浮点数运算精度丢失的问题。在JavaScript中,由于其内置的Number类型使用的是双精度浮点数(IEEE 754),在进行大数值或者高...

    no.rar_数值算法/人工智能

    数值算法是计算机科学中解决数学问题的一种技术,通常涉及浮点运算和迭代方法。而人工智能则涵盖了机器学习、深度学习、自然语言处理等多个子领域,旨在使计算机模拟人类的智能行为。 【压缩包子文件的文件名称列表...

    微信小程序 求解 一元一次方程

    此外,了解数值计算的稳定性与精度问题也是必要的,因为计算机浮点运算可能存在误差。 在文件"zhiliuhuansuan-tool"中,可能包含了小程序的源代码、资源文件(如图片、样式表等)以及配置文件。开发者可以通过分析...

    零基础学python全套课后题带目录.doc

    - 技术难点回顾与解决方法 - 学习资源整理与分享 - 后续学习计划与目标设定 以上是基于给定文档目录概览出的各章节可能涉及的关键知识点,希望能够为初学者提供一份系统全面的Python学习指南。

    STM32_W5500_stm32_w5500_w5500_

    1. 内核:基于ARM Cortex-M4,具有浮点运算单元(FPU),提供高速处理能力。 2. 存储:通常配备有闪存(Flash Memory)和SRAM,可用于存储程序代码和数据。 3. 接口丰富:包括USART、SPI、I2C、CAN、USB、ADC、DAC等...

    Python项目整理: 基础入门、数据分析、爬虫实践-Python-Projects.zip

    每个项目可能包括问题定义、需求分析、代码实现、结果验证和优化等步骤,这对于提高Python技能和解决问题的能力非常有益。无论你是初学者还是有一定经验的开发者,都可以从中受益。记得在实践中不断探索,将理论知识...

    5.1 软件编程1

    10. **数据结构和算法选择**:合理选择数据结构和算法能提高程序效率,避免浮点运算的精度问题,减少不必要的计算。 11. **代码组织**:根据职责分离原则,确保每个类或模块有明确的责任,避免霰弹式修改和发散式...

    ArcGIS_Server培训课件

    选择具有高效整数运算性能的CPU对Map服务有好处,而进行地理处理(GP)时,选择具有高效浮点运算性能的CPU更为合适。 - **内存**:内存大小直接影响着系统的处理能力和速度,对于提升ArcGIS Server的性能至关重要。 ...

    science.js:处理读取数据从未如此简单

    1. **数值计算**:Science.js 提供了基本的数学函数,如平方根、指数、对数等,还支持高精度计算,避免了浮点运算中的精度损失。此外,它还包含了复数运算,满足了涉及复数的科学应用需求。 2. **统计分析**:对于...

Global site tag (gtag.js) - Google Analytics