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 相关文章推荐
ext读取两种结构的xml的代码
Nov 05 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
Firefox下无法正常显示年份的解决方法
Sep 04 Javascript
jQuery焦点图左右转换效果
Dec 12 Javascript
js数组去重的hash方法
Dec 22 Javascript
jQuery实现字符串全部替换的方法【推荐】
Mar 09 Javascript
微信小程序实现锚点定位楼层跳跃的实例
May 18 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 Javascript
Vue3 中的数据侦测的实现
Oct 09 Javascript
node+multer实现图片上传的示例代码
Feb 18 Javascript
基于Web Audio API实现音频可视化效果
Jun 12 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日历程序
2006/12/06 PHP
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
jQuery实现跨域
2015/02/03 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
javascript编写简易计算器
2017/05/06 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
Python创建日历实例
2014/08/21 Python
python轻松实现代码编码格式转换
2015/03/26 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
幼儿园中班新学期寄语
2014/01/18 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
董事长年会致辞
2015/07/29 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
python数字图像处理之图像的批量处理
2022/06/28 Python