两个文本框数值做乘除,为什么有时会出现计算结果位数过多现象?立即给分!

sisicat 2003-07-21 02:34:27
如:
两个文本框中的数据做如下计算:
parseFloat((parseFloat(document.form.text1.value) * parseFloat(document.form.text2.value))/100);

有时候就会出现结果是小数位很长的数,如
70.0555*7=490.38849999999996
但是很显然不应是这个结果,请问是什么问题,如何解决?
...全文
55 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangking 2003-07-21
  • 打赏
  • 举报
回复
混帐! 不是js做浮点运算不够精确, 是电脑本身就不精确!!!
sisicat 2003-07-21
  • 打赏
  • 举报
回复
同意wsj(骆驼)的说法,关键是js做浮点运算不够精确。谢谢各位的指教。
zhangking 2003-07-21
  • 打赏
  • 举报
回复
你不是学计算机出身的吧?
数值在计算机的机内表示, 并不象你用笔在纸上记数! 所以就会产生误差!
所以,判断 2 个数是否相等, 真正的判断应当是:
if (a-b)<0.0000001 then ……
因为2个相等的数,在计算机里可能因为误差,被计算机认为不相等。
这样,你该明白相除的结果,有好多位小数的原因了吧?
wsj 2003-07-21
  • 打赏
  • 举报
回复
JS做浮点运算不精确

可以先变为整数相乘后,再除以移位数

function multi(p1,p2){
var t1=0,t2=0,r1,r2;
try{t1=p1.toString().split(".")[1].length}catch(e){}
try{t2=p2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=p1*pow(10,t1)
r2=p2*pow(10,t2)
return ((r1*r2)/pow(10,t2+t1));
}
}
alert(multi(70.0555, 7));

fason 2003-07-21
  • 打赏
  • 举报
回复
ie的bug

<script>
function Number.prototype.Fixed(num){
with(Math){
var m=pow(10,Number(num))
return round(this*m)/m;
}
}
alert(c(56.10,23.12).Fixed(2));
function c(n1,n2){
var m=0,s1=n1.toString(),s2=n2.toString();
m=s1.split(".")[1].length
m=s2.split(".")[1].length
return (n1-n2).Fixed(m)//高版本可以用(n1-n2).toFixed(m)
}
</script>
seabell 2003-07-21
  • 打赏
  • 举报
回复
<input id=text1 value=70.0555>
<input id=text2 value=7>
<script>
alert(parseInt(parseFloat(parseFloat(document.all.text1.value)*parseFloat(document.all.text2.value))*100)/100);
</script>

87,987

社区成员

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

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