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版代码高亮
Jun 26 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
Feb 07 Javascript
js控制的回到页面顶端goTop的代码实现
Mar 20 Javascript
js replace 与replaceall实例用法详解
Aug 03 Javascript
js跑步算法的实现代码
Dec 04 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
利用node.js爬取指定排名网站的JS引用库详解
Jul 25 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
vue组件之间通信方式实例总结【8种方式】
Feb 22 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
JQuery使用数组遍历跳出each循环
Sep 01 jQuery
详解JavaScript中分解数字的三种方法
Jan 05 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的autoload自动加载机制使用说明
2010/12/28 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
php注册登录系统简化版
2020/12/28 PHP
php中this关键字用法分析
2016/12/07 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
Javascript缓存API
2016/06/14 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
python实现微信小程序自动回复
2018/09/10 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
pymysql模块使用简介与示例
2020/11/17 Python
python 模块导入问题汇总
2021/02/01 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
公务员转正鉴定材料
2014/02/11 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
西安事变观后感
2015/06/12 职场文书
投诉信格式范文
2015/07/02 职场文书
生活小常识广播稿
2015/08/19 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python