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对象的property和prototype是这样一种关系
Mar 24 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
jquery控制display属性为none或block
Mar 31 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
JS常用字符串方法(推荐)
Jan 15 Javascript
深入分析javascript中console命令
Aug 14 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
Jan 05 Javascript
原生js实现手风琴功能(支持横纵向调用)
Jan 13 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
详解ES6之async+await 同步/异步方案
Sep 19 Javascript
JavaScript代码执行的先后顺序问题
Oct 29 Javascript
关于layui时间回显问题的解决方法
Sep 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执行速度全攻略(上)
2006/10/09 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
php发送post请求的三种方法
2014/02/11 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
jquery里的each使用方法详解
2010/12/22 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
详解javascript函数的参数
2015/11/10 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
express框架下使用session的方法
2019/07/31 Javascript
python读写ini配置文件方法实例分析
2015/06/30 Python
Python操作csv文件实例详解
2017/07/31 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
python学生信息管理系统(完整版)
2020/04/05 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
super()与this()的区别
2016/01/17 面试题
行政人事专员岗位职责
2014/03/05 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
个人作风建设心得体会
2014/10/22 职场文书