javascript相加计算问题

dropping 2008-02-23 12:36:52
<script language="javascript">
var num1='0.00964';
var num2='0.045';
var sum,sum1;

sum=parseFloat(num1)+parseFloat(num2);
sum1=eval(num1)+eval(num2);
alert(sum+'\n'+sum1);
</script>

sum和sum1的值都是0.054639999999999994...
其他的两个值相加也正确,突然试到0.00964和0.045相加就出问题了.
...全文
2023 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyfox0015 2010-06-08
  • 打赏
  • 举报
回复
//加法函数,用来得到精确的加法结果
worm-wei 2010-05-04
  • 打赏
  • 举报
回复
使用Javascript做小数(浮点数)加法运算时,小数位数不精确(举例:2.01+90.01=92.02000000000001)。可以使用下面的函数解决此问题:

//加法函数,用来得到精确的加法结果
//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用:FloatAdd(arg1,arg2)
//返回值:arg1加上arg2的精确结果
function FloatAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (arg1*m+arg2*m)/m
}
aaa7621544 2010-03-15
  • 打赏
  • 举报
回复
看看啦 试试
psliaowen 2009-12-06
  • 打赏
  • 举报
回复
谢谢,先看看
  • 打赏
  • 举报
回复
如楼上说所的,要看你要多少精度
hbhbhbhbhb1021 2008-02-23
  • 打赏
  • 举报
回复
浮点数相加都那样IEEE754标准,是因为存储有关
要四舍五入,就要看你要多少精度了,下面是5位小数
<script language="javascript">
var num1='0.00964';
var num2='0.045';
var sum,sum1;

sum=parseFloat(num1)+parseFloat(num2);
sum1=eval(num1)+eval(num2);
alert(Math.round(sum*100000)/100000.00000+'\n'+Math.round(sum1*100000)/100000.00000);
</script>
dropping 2008-02-23
  • 打赏
  • 举报
回复
简洁一点就 sum.toFixed(5) 保留五位小数.

87,997

社区成员

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

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