`

少见多怪--Js中的0.29之怪现象

阅读更多

                  少见多怪--Js中的0.29之怪现象

  今天遇到一个超级奇怪的问题,就是在javascript中0.29 * 100等于多少的问题。
  <script language="javascript">
    var test = 0.29 * 100;
    alert(test);
  </script>
  估计很多人认为是29,可事实上并非如此,结果确实28.999....996,我省略了几个9.
 
  再问你一个,javascript中0.39 * 100等于多少呢?

  估计有人说是39.999..996,而事实上,结果确实39.

  请看以下脚本:

<script language="javascript">
var temp1 = 0.19;
var temp2 = 0.29;
var temp3 = 0.39;
var temp4 = 0.49;
var temp5 = 0.59;
var temp6 = 0.69;
var temp7 = 0.79;
var temp8 = 0.89;
var temp9 = 0.99;
alert(temp1 * 100);
alert(temp2 * 100);
alert(temp3 * 100);
alert(temp4 * 100);
alert(temp5 * 100);
alert(temp6 * 100);
alert(temp7 * 100);
alert(temp8 * 100);
alert(temp9 * 100);
</script>

运行后,你会发现,除了0.29意外,其他的结果都是整数。

为什么唯独0.29如此特殊呢??

注:我的操作系统是win2000 sp4,ie浏览器的版本为:6.0.2800.1106

分享到:
评论
8 楼 阳光晒晒 2008-12-19  
fins 写道
楼主, 你要是有时间 就去 google一下 "深入浅出浮点数"
这是一篇详细介绍 浮点数原理的 文章 看完之后你就能明白了

如果没时间 给你个简陋版的答案:

这是因为计算机使用二进制保存数据,对于有限位十进制的小数来说,二进制使他变成了无限不循环小数(至于为什么,建议看数学书),损失了一点,然后在恢复成十进制时自然会有一点误差.

二进制除法,用的是积分方程来逼进的.....
7 楼 DavyLee 2008-12-19  
无限不循环小数
fins 写道

DavyLee 写道
我是说为什么偏偏0.29如此,而别的数据没事谁告诉你的别的数据没事???? 你自己去google 吧 你标题里的"少见多怪" 用的还真是恰当

呵呵,你自己试验一下0.39*100,看看得数有小数吗?
6 楼 fins 2008-12-19  
楼主, 你要是有时间 就去 google一下 "深入浅出浮点数"
这是一篇详细介绍 浮点数原理的 文章 看完之后你就能明白了

如果没时间 给你个简陋版的答案:

这是因为计算机使用二进制保存数据,对于有限位十进制的小数来说,二进制使他变成了无限不循环小数(至于为什么,建议看数学书),损失了一点,然后在恢复成十进制时自然会有一点误差.
5 楼 xuyao 2008-12-19  
换种写法不就行了:alert(0.29*10*10)
4 楼 fins 2008-12-19  
DavyLee 写道
我是说为什么偏偏0.29如此,而别的数据没事


谁告诉你的别的数据没事????

你自己去google 吧

你标题里的"少见多怪" 用的还真是恰当
3 楼 DavyLee 2008-12-19  
我是说为什么偏偏0.29如此,而别的数据没事
2 楼 fins 2008-12-18  
浮点数的问题 很多语言都这样 和浏览器无关
1 楼 stefenjun 2008-12-18  
2003 IE7 结果同样
等高手来解

相关推荐

Global site tag (gtag.js) - Google Analytics