javascript中的float运算精度实例分析


Posted in Javascript onAugust 21, 2010

有人问到一个js问题:

var i = 0.07; 
var r = i*100; 
alert(r);

结果为什么是7.0000000000000001?
查了下资料,其实我们知道JavsScript中,变量在存储时并不区分number和float类型,而是统一按float存储。而javascript使用IEEE 754-2008 标准定义的64bit浮点格式存储number,按照IEEE 754的定义: http://en.wikipedia.org/wiki/IEEE_754-2008
decimal64对应的整形部分长度为10,小数部分长度为16,所以默认的计算结果为“7.0000000000000001”,如最后一个小数为0,则取1作为有效数字标志。

类似地,我们可以想像,1/3的结果应该是0.3333333333333333。
那么如何校正这个值呢?
可以用以下方法:
一、parseInt

var r4=parseInt(i*100);

二、Math.round

var r2=Math.round((i*100)*1000)/1000;

以上两种方法都可以得到7
附全部测试代码:

<html> 
<head> 
<title>测试脚本</title> 
<script language="JAVASCRIPT"> 
function init() 
{ 
var i = 0.07; 
var r = i*100; 
var r2=Math.round((i*100)*1000)/1000; 
var r3 = eval(i*100); 
var r4=parseInt(i*100); 
var r5=parseFloat(i*100*1.0000); 
var r6=(1/3); 
alert(r); 
alert("Math.round="+r2); 
alert("eval="+r3); 
alert("parseInt="+r4); 
alert("parseFloat="+r5); 
alert(""+r6); 
} 
</script> 
</head> 
<body onload="init();"> 
</body> 
</html>
Javascript 相关文章推荐
Javascript注入技巧
Jun 22 Javascript
JQuery jsonp 使用示例代码
Aug 12 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
Mar 25 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
极力推荐10个短小实用的JavaScript代码段
Aug 03 Javascript
关于Javascript中defer和async的区别总结
Sep 20 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
Nov 26 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
Javascript实现鼠标移入方向感知
Jun 24 Javascript
Firebug入门指南(Firefox浏览器)
Aug 21 #Javascript
jquery插件之easing 动态菜单
Aug 21 #Javascript
url地址自动加#号问题说明
Aug 21 #Javascript
jquery中输入验证中一个不错的效果
Aug 21 #Javascript
单独使用CKFinder选择图片的方法
Aug 21 #Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 #Javascript
基于jQuery UI CSS Framework开发Widget的经验
Aug 21 #Javascript
You might like
网站用php实现paypal整合方法
2010/11/28 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
Python: 传递列表副本方式
2019/12/19 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
运行Python编写的程序方法实例
2020/10/21 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
四风存在的原因分析
2014/02/11 职场文书
企业出纳岗位职责
2014/03/12 职场文书
赔偿协议书范本
2014/09/12 职场文书
2014年教育工作总结
2014/11/26 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
中秋联欢会主持词
2015/07/04 职场文书
高中生军训感言
2015/08/01 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
js之ajax文件上传
2021/05/13 Javascript
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
python图像处理 PIL Image操作实例
2022/04/09 Python