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几种形式的树结构菜单
May 10 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
Jun 12 Javascript
jquery实现漂亮的二级下拉菜单代码
Aug 26 Javascript
jquery悬浮提示框完整实例
Jan 13 Javascript
AngularJS仿苹果滑屏删除控件
Jan 18 Javascript
JS+Canvas 实现下雨下雪效果
May 18 Javascript
JavaScript实现解析INI文件内容的方法
Nov 17 Javascript
jQuery插件zTree实现删除树节点的方法示例
Mar 08 Javascript
Vue项目中ESlint规范示例代码
Jul 04 Javascript
React学习之受控组件与数据共享实例分析
Jan 06 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 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判断浏览器的类型和语言的函数代码
2013/02/28 PHP
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python图像处理之反色实现方法
2015/05/30 Python
Python读取键盘输入的2种方法
2015/06/16 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
Python中的类与类型示例详解
2019/07/10 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
python 基于opencv操作摄像头
2020/12/24 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
服装厂厂长职责
2013/12/16 职场文书
数学检讨书1000字
2014/02/24 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
英文演讲稿
2014/05/15 职场文书
企业金融服务方案
2014/06/03 职场文书
霸气队列口号
2014/06/18 职场文书
安全承诺书
2015/01/19 职场文书