博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js精确计算
阅读量:5099 次
发布时间:2019-06-13

本文共 560 字,大约阅读时间需要 1 分钟。

转自:

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

alert(45.6*13);

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

那这是js的错误吗?

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

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

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

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

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

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

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

      
 
 
 

转载于:https://www.cnblogs.com/liyuspace/p/9815635.html

你可能感兴趣的文章
java序列化与反序列化
查看>>
tomcat进行reload之后类会重新加载不释放,容易导致内存溢出
查看>>
不错的东西: AutoMapper
查看>>
oracle数据库在启动时(startup)报错ORA-00600: 内部错误代码,参数: [kcratr1_lostwrt], [], [], [], [], [], [], []...
查看>>
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
查看>>
Linux服务器的那些性能参数指标
查看>>
面试高级算法梳理笔记
查看>>
访问服务器,远程访问linux主机
查看>>
Java Day 09
查看>>
走近Java之幕后的String
查看>>
一些比较好的论坛、博客
查看>>
iOS cocoapods 怎么开源代码
查看>>
第十七节:类与对象-属性-类常量-自动加载对象
查看>>
【博客美化小妙招】你希望有一个可爱的看板娘吗?
查看>>
BZOJ.2159.Crash的文明世界(斯特林数 树形DP)
查看>>
c# 设计模式
查看>>
Android Service被关闭后自动重启,解决被异常kill 服务
查看>>
计蒜客复赛 百度地图导航(最短路,好题,经典拆点)
查看>>
经典排序算法的总结及Python实现
查看>>
【pwnable.kr】fb
查看>>