日期:2014-05-16  浏览次数:20566 次

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.7749999999998
var    Result01=Result001.toFixed(3);    //返回字符串得1049.775
    alert(typeof(Result01)+':'+Result01);    //弹出结果:"字符型:1049.775"
    Result01=parseFloat(Result01);    //转为数值类型:1049.775
    alert(typeof(Result01)+':'+Result01);    //弹出结果:"数值型:1049.775"
</script>