首页 新闻 会员 周边

js,var i = 0.07;var r = i * 100;alert(r); 输出多少?and why?

0
悬赏园豆:20 [已解决问题] 解决于 2010-08-20 15:48

今天系统显示的利率百分比突然出现了长长的小数位。很奇怪的问题。

测试代码如下:
var i = 0.07;var r = i * 100;alert(r); 

demo

why? 请赐教

问题补充: 原来编辑器不支持手写js,demo被屏蔽了。 我想问的是 var i = 0.06; j = 0.07; i * 100 的值和 j * 100 的值 区别。
码尔代夫iimax的主页 码尔代夫iimax | 老鸟四级 | 园豆:3138
提问于:2010-08-19 17:18
< >
分享
最佳答案
0

这个....说不清楚,就这个有问题,刚也试了。

看看这里,或许有帮助,可以google翻译一下。

http://objectmix.com/javascript/23644-faq-topic-why-does-5-*-1-015-=-5-075-0-06-0-01-=-0-07-a.html

收获园豆:10
Astar | 高人七级 |园豆:40805 | 2010-08-19 17:36
其他回答(1)
0

这个主要是javascript的数据类型转换导致。

注意:Javascript在存储时并不区分number和float类型,而是统一按float存储。而javascript使用IEEE 754-2008 标准定义的64bit浮点格式存储number,按照IEEE 754的定义:

decimal64对应的整形部分长度为 10,小数部分长度为16,所以默认的计算结果为“7.0000000000000001”,如最后一个小数为0,则取1作为有效数字标志。

 

可以用以下方法校正:

<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;
alert(r);
alert(r2);
}
</script>
</head>
<body onload="init();">

</body>
</html>
收获园豆:10
邀月 | 园豆:25475 (高人七级) | 2010-08-19 19:12
也感谢邀月给出解决办法。我就是想知道为什么,想了解js数据类型的计算方式,如知详情,请告知,甚是感谢。(解决办法我暂时采用的是parseInt(i*100))
支持(0) 反对(0) 码尔代夫iimax | 园豆:3138 (老鸟四级) | 2010-08-19 23:13
@iIMax:原因大致如上所述。
支持(0) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2010-08-20 10:48
就你俩回答 都给10分。多谢
支持(0) 反对(0) 码尔代夫iimax | 园豆:3138 (老鸟四级) | 2010-08-20 15:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册