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 相关文章推荐
Js动态添加复选框Checkbox的实例方法
Apr 08 Javascript
jquery实现按Enter键触发事件示例
Sep 10 Javascript
a标签click和href执行顺序探讨
Jun 23 Javascript
chrome调试javascript详解
Oct 21 Javascript
js实现的页面矩阵图形变换特效
Jan 26 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
Jan 04 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
Jan 10 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
Oct 29 Javascript
express express-session的使用小结
Dec 12 Javascript
详解js 创建对象的几种方法
Mar 08 Javascript
利用JS响应式修改vue实现页面的input值
Sep 02 Javascript
JavaScript实现简单日历效果
Sep 11 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
Terran热键控制
2020/03/14 星际争霸
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
php读取本地json文件的实例
2018/03/07 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
Python 错误和异常小结
2013/10/09 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
Python字符串处理实例详解
2017/05/18 Python
Python中GIL的使用详解
2018/10/03 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
护理毕业生自荐信范文
2013/12/22 职场文书
读书笔记格式
2015/07/02 职场文书
2016年教师新年寄语
2015/08/18 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
golang定时器
2022/04/14 Golang