大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子

alert(45.6*13);

结果居然是592.800000000001,当然加法之类的也会有这个问题

那这是js的错误吗?

当然不是,你的电脑做着正确的二进制浮点运算,但问题是你输入的是十进制的数,电脑以二进制运算,这两者并不是总是转化那么好的,有时候会得到正确的结果,但有时候就不那么幸运了

alert(0.7+0.1);//输出0.7999999999999999
alert(0.6+0.2);//输出0.8

你输入两个十进制数,转化为二进制运算过后再转化回来,在转化过程中自然会有损失了

但一般的损失往往在乘除运算中比较多,而JS在简单的加减法里也会出现这类问题,你也看到了,这个误差也是非常小的,但是却是不该出现的

那该怎么解决呢,ECMA4似乎给了解决方法,但是现在倒不是那么实用的

一种方法,比如0.7+0.1,先把0.1和0.7都乘10,加完之后再除10

另外可以自己写点函数来解决这个问题,自己百度谷歌一下应该有很多,但是最好还是不要用JS做一些复杂的浮点运算,毕竟JS更多的作用不在于此

最新文章

  1. React在开发中的常用结构以及功能详解
  2. [ MySql学习心得 ] --One
  3. Round in Oracle/VBA
  4. Android系统中的6种模式
  5. HTML5 Canvas绘文本动画(使用CSS自定义字体)
  6. NIOS II开发备忘录
  7. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)
  8. 也谈LBP
  9. URAL 1136 Parliament 二叉树水题 BST后序遍历建树
  10. Jfinal 入门
  11. JavaScript权威指南学习笔记4
  12. jQuery Mobile 入门基础教程
  13. Windows环境下JDK的下载与安装
  14. 用session做权限控制
  15. AutoCAD中的扩展字典及扩展记录(C#)
  16. python的错误处理
  17. krpano 常用标签
  18. ActiveMQ(为什么要使用消息中间件,JMS传输模型)
  19. uni-app — 一套前端开发跨平台应用的终极解决方案
  20. sql函数创建

热门文章

  1. Java反射---对象池
  2. C#之委托和事件
  3. Ext JS 5 beta版发布
  4. MTU 最大传输单位
  5. 第十八篇 ANDROID的声音管理系统及服务
  6. 【44】java大数值剖析
  7. STM32中GPIO的8种工作模式
  8. Linux系统下常用的快捷键
  9. 创建Sencha touch第一个应用
  10. jQuery事件控制点击内容下拉