为什么1.1*100=110.00000000000001 ?

bingbhz 2005-01-06 06:00:55
RT

碰到了,虽然用Math.round取到了110,但不明白为什么1.1*100=110.00000000000001
...全文
581 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
梅雪香 2005-01-07
  • 打赏
  • 举报
回复
回复人: net_lover(孟子E章) ( ) 信誉:865 2005-01-07 08:01:00 得分: 0


脚本不适合做浮点运算的。


孟子E章 2005-01-07
  • 打赏
  • 举报
回复
脚本不适合做浮点运算的。
cxz7531 2005-01-07
  • 打赏
  • 举报
回复 1
浮点数运算的时候,必须先转化为二进制。例如数字105.01转化为二进制后是一个无限循环小数1101001.00 <00001010001111010111> .......<>里面是循环节,有无限多个,在计算机存储的时候只能舍入。所以浮点数运算一般是近似的。只要小数点后面的位数不大,可以手工移动小数点转化为整数。虽然浮点数运算有误差,但一般误差极微,采用四舍五入也可
在有些情况下,没有这个问题,是因为:
有些时候转化正好不是无限循环小数,或者是因为误差极小,在计算机显示的时候舍入(计算机显示的时候也要舍入,一般内部运算位数大于显示位数)掉了
这种小概率事件,用的时间长了,哪种语言都会出现这种情况。除非有一种语言,运算位数和显示位数差距过大,这种误差总是在显示的时候被舍掉。
cxz7531 2005-01-07
  • 打赏
  • 举报
回复
我以前曾经两次回答过这个问题,楼主请看这个帖子
http://community.csdn.net/Expert/topic/3439/3439985.xml?temp=.4362757

feiyangbahu 2005-01-07
  • 打赏
  • 举报
回复
呵呵,那是为了奖励你勤奋,多给了你 .00000000000001
lienzhu 2005-01-06
  • 打赏
  • 举报
回复
呵呵,也迷惑!
1.1*100=110.00000000000001

0.1*100=10
1.1*10=11
1.1*1000=1100
1.2*100=120
1.0*10=100
2.1*100=210


87,995

社区成员

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

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