eval函数精确问题

sxlcom 2008-04-03 10:04:45
请问大家在JS中使用eval函数遇到数值不精确的问题没有,如遇到了怎么解决.(如eval(Field001*Fidle002))
Field001和Fidle002是变量;
...全文
809 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dead_of_winter 2008-04-08
  • 打赏
  • 举报
回复
其实浮点精度问题是CPU的浮点运算器导致的 js里面有时候整型会被自动转换成浮点型做运算 这样就通过了浮点运算器,于是产生了误差。
langtse 2008-04-08
  • 打赏
  • 举报
回复

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

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

这下应该够清楚了吧.

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


<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>


可以结贴了.^_^.
sxlcom 2008-04-07
  • 打赏
  • 举报
回复
其实保留两位小数是业务的需要,如果保留三位的话:29264.95*0.001=29.26495=29.265这样又有差异了
langtse 2008-04-05
  • 打赏
  • 举报
回复
罪不在eval,eval的功能是:检查 JScript 代码并执行.
而是因为js给了你一个浮点数,你需要对小数进行取舍.
若按常规保留3位小数,则8楼可能是手误.
下面代码已在IE6上测试过,你可以验证下.

<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>

浴火_凤凰 2008-04-05
  • 打赏
  • 举报
回复
JS 本身的精度问题。
hbhbhbhbhb1021 2008-04-04
  • 打赏
  • 举报
回复
暂时没有可能,因为内存存储的关系啊。可以去查阅下IEEE754标准
sxlcom 2008-04-04
  • 打赏
  • 举报
回复
<script language=javascript>
var Field001=34992.5
var Fidle002=0.03
alert(eval(Field001*Fidle002).toFixed(2))
</script>
-------------------
这样处理是有问题的这样得出的结果是:1049.77
应为1049.775

其实也是一种情况,如果出现其它情况该如何处理呢,关键是怎么样来通过一种规律来处理所有的精度问题
hbhbhbhbhb1021 2008-04-04
  • 打赏
  • 举报
回复
<script language=javascript>
var Field001=34992.5
var Fidle002=0.03
alert(eval(Field001*Fidle002).toFixed(2))
</script>
sxlcom 2008-04-04
  • 打赏
  • 举报
回复
但这个不好处理呀没有什么规则呀
myvicy 2008-04-04
  • 打赏
  • 举报
回复
是js的问题.它本身精度就不够。
可以四舍五入处理一下.
sxlcom 2008-04-04
  • 打赏
  • 举报
回复
终于找到了据体数据如下:
34992.5*3%=1049.774999999...8
应为1049.775
为什么会这样难道eval函数有精确问题
tantaiyizu 2008-04-03
  • 打赏
  • 举报
回复
不知道你变量值是多少
sxlcom 2008-04-03
  • 打赏
  • 举报
回复
不好意思具体数值我要查找一下,
hookee 2008-04-03
  • 打赏
  • 举报
回复
Math.round(Field001*Fidle002*1000)/1000
hbhbhbhbhb1021 2008-04-03
  • 打赏
  • 举报
回复
不会啊

<script language=javascript>
var Field001=20.2
var Fidle002=2.1
alert(eval(Field001*Fidle002))
</script>

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧