js 小数运算问题
来源:互联网 发布:苹果自制铃声软件 编辑:程序博客网 时间:2024/05/01 12:46
问题:
在写简单计算器时遇到过,把字符串解析成浮点数算减法,得到过 这样的结果 5-3.2=1.7999999999999998,很奇怪。
部分代码如下:
case "-": s=parseFloat(t1)-parseFloat(t2); break;
原因:
java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。
十进制数字 8,用二进制表示为 100
可以理解为 1*2^2+0*2^1+0*2^0 = 8那么小数部分怎么表示?
十进制数字 0.5,用二进制表示为 0.1
可以理解为 0*2^0+1*(2^-1) = 0.5
十进制数字 0.25,用二进制表示为 0.01
可以理解为 0*2^0+0*(2^-1)+1*(2^-2) = 0.25
十进制数字 0.75,用二进制表示为 0.11
可以理解为 0*2^0+1*(2^-1)+1*(2^-2) = 0.75
好了,问题来了 怎么表示一个 介于 0.25~0.5 之间的数?
除不尽吧?无理数吧?对了,这就是浮点数不是刚刚好等于一个十进制浮点数的原因
解决方法:
要避免这种情况呢,通常可以将小数同时扩大相同10的整倍数,完成计算后,在去掉之前添加的整倍数。
部分代码如下:
case "-": s=(parseFloat(t1*100)-parseFloat(t2*100))/100;
0 0
- js 小数运算问题
- JS小数运算精度问题
- JS小数运算出现多位小数的问题
- JS 精确小数运算
- JS小数加减乘除运算
- JS小数运算不对
- js小数运算精度问题,js浮点数运算时出现精度问题
- js计算出现多位小数-Javascript 浮点运算问题分析与解决
- js为什么不能正确处理小数运算?
- JS浮点数(小数)运算Bug
- js做两位小数运算防止经度丢失
- JS之小数精度问题
- js小数计算小数点后显示多位小数--问题
- JS 四则运算(加减乘除小数运算)避免损失精度
- js 和 java 有小数的运算 注意事项
- js中保证小数运算精度的解决
- JS小数运算丢失精度计算错误等解决方案
- js精确小数乘法(解决精度问题)
- OC 入门开发之xCode环境搭建
- 【leetcode c++】09 Palindrome Number
- Android开源项目分类汇总
- Java数据结构-稀疏数组
- 杭电 1004
- js 小数运算问题
- 精确到秒的JQuery日期控件
- jQuery中添加自定义或函数方法1
- leetcode--Subsets II
- android:imeOptions属性
- nginx安装
- 字典转模型
- iOS JS交互--UIWebView与JS的交互
- 据说,年薪百万的程序员,都是这么开悟的(一)