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 相关文章推荐
ie 处理 gif动画 的onload 事件的一个 bug
Apr 12 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
再次分享18个非常棒的jQuery表格插件
Apr 10 Javascript
表单切换,用回车键替换Tab健(不支持IE)
Jul 20 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
May 16 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
Mar 09 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
Oct 15 Javascript
原生js实现购物车功能
Sep 23 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 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出现web系统多域名登录失败的解决方法
2014/09/30 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
Python 装饰器深入理解
2017/03/16 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
高中生期末评语
2014/01/28 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
《凡卡》教学反思
2014/04/09 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
python实现简单的名片管理系统
2021/04/26 Python
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL