发新话题
打印

[编程技巧] 头疼的小程序(关于floor)

头疼的小程序(关于floor)

程序如下:
for j=0.05:0.05:0.7
    h=floor(j/0.05);
    S1(:,h)=j/0.05;
end
不知道为什么这段小程序的结果很奇怪,按照正常应该得到1-14,但是实际运行结果却是1,2,3,4,6,0,7,8,……。
我单步运行看了看,当j=0.3的时候,自动会把第五列替换成6,并且把第六列幅值0,请高手帮帮忙指导一下!!小女子非常感谢!!


[ 本帖最后由 sigma665 于 2008-8-29 12:06 编辑 ]

TOP

j=0.05:0.05:0.7;
S1=j/0.05;
这样就行了


floor(0.3/0.05)=5
round(0.3/0.05)=6

[ 本帖最后由 sigma665 于 2008-8-29 12:06 编辑 ]
http://www.chinavib.com/forum/?fromuser=sigma665

TOP

楼上的帮助解决问题了,但是我还是有点不明白,在matlab直接运行0.3/0.05,结果也是6,为什么用floor函数结果就变成5了,而用round函数结果就是6?matlab真的有些高深莫测!!

[ 本帖最后由 lovegirlmeijie 于 2008-8-29 15:56 编辑 ]

TOP

回复 板凳 lovegirlmeijie 的帖子

这个问题,我不知道
http://www.chinavib.com/forum/?fromuser=sigma665

TOP

floor是向下取整,a = floor(b),a得到的是小于等于b的最大整数。如果b是整数,那么自然a=b.
否则,即时b = 5.999999999999999,那么a = floor(b)也会得到5.
我们知道小数在计算机中表示是有误差的,0.3/0.05计算结果在计算机中并不是精确的以6来表示,这和12/2不同。
楼主运行format long后再运行0.3/0.05就知道了。
至于round是我们通常用到的四舍五入。
类似的函数还有ceil,fix
楼主应该查看帮助了解其用法
本帖最近评分记录
  • sigma665 威望 +1 2008-8-29 16:53 理由:回答比较全面的解决了问题
delete(findobj('发帖目的','求代码'))
s='遇到困难'
set(findobj(s,'上来求助'),s,'先搜索')

TOP

这个以前确实没有怎么注意,不错
跟c一样,2/3结果为0,2.0/3就是0.6666666

TOP

哈哈,学到了很多啊

TOP

发新话题