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 原型学习总结
Oct 29 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 Javascript
纯CSS3代码实现滑动开关效果
Aug 19 Javascript
jQuery Easyui实现左右布局
Jan 26 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
js实现悬浮窗效果(支持拖动)
Mar 09 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
Nov 20 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
JS中touchstart事件与click事件冲突的解决方法
Mar 12 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 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
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
js中开关变量使用实例
2017/02/24 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
前端常见跨域解决方案(全)
2017/09/19 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
Python实现针对中文排序的方法
2017/05/09 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python可迭代对象操作示例
2019/05/07 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
python raise的基本使用
2020/09/10 Python
采购部部门职责
2013/12/15 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
介绍信怎么写
2015/01/30 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
如何使用php生成zip压缩包
2021/04/21 PHP
快速学习Oracle触发器和游标
2021/06/30 Oracle