读书人

eval函数精确有关问题

发布时间: 2012-02-21 16:26:23 作者: rapoo

eval函数精确问题
请问大家在JS中使用eval函数遇到数值不精确的问题没有,如遇到了怎么解决.(如eval(Field001*Fidle002))
Field001和Fidle002是变量;

[解决办法]
<script language=javascript>
var Field001=34992.5
var Fidle002=0.03
alert(eval(Field001*Fidle002).toFixed(2))
</script>
[解决办法]
罪不在eval,eval的功能是:检查 JScript 代码并执行.
而是因为js给了你一个浮点数,你需要对小数进行取舍.
若按常规保留3位小数,则8楼可能是手误.
下面代码已在IE6上测试过,你可以验证下.

HTML code
<script language="javascript">     var Field001=34992.5;    var Fidle002=0.03;    document.write(eval(Field001*Fidle002).toFixed(3));    confirm((Field001*Fidle002).toFixed(3));    alert(Field001*Fidle002);</script>
[解决办法]

根据微软提供的JScript 语言参考 ,上面提到:

"数值数据类型
在 Jscript 中整数和浮点值没有差别;JScript 数值可以是其中任意一种
(JScript 内部将所有的数值表示为浮点值)。"

这下应该够清楚了吧.

所以还是建议根据实际需要保留精度吧!
中间参与计算的数都取浮点值,只在最后将所需结果取精度,
这样可以将误差值降到最小.

HTML code
<script language="javascript"> var    Field001=34992.5;    //你提供的被除数var    Fidle002=0.03;    //你提供的乘数var    Result001=Field001*Fidle002;    //直接乘得1049.7749999999998var    Result01=Result001.toFixed(3);    //返回字符串得1049.775    alert(typeof(Result01)+':'+Result01);    //弹出结果:"字符型:1049.775"    Result01=parseFloat(Result01);    //转为数值类型:1049.775    alert(typeof(Result01)+':'+Result01);    //弹出结果:"数值型:1049.775"</script> 

读书人网 >JavaScript

热点推荐