Matlab double型数据怎样截取整数部分

想要只截取生成的一列double型数据的整数部分,但不进行四舍五入。如:
[1.0000 0.0000 0.3333 0.6987] 截取后得到 [1 0 0 0].

试过用uint 得到的是[1 0 0 1],也试过用floor,也得不到想要的结果。
fix我也试过了,不行呐。我用linprog函数得出了一组double数:
x'= 1.0000 1.0000 0.3333 0.0000 1.0000 1.0000 0.0000 0.0000 0.6667 1.0000 0.0000 -0.0000
fix(x)' = 0 0 0 0 0 0 0 0 0 0 0 0
floor(x)'= 0 0 0 0 0 0 0 0 0 0 0 -1

有两种办法,结果不同

1 floor函数,向下取整

>> floor([1.0000 0.0000 0.3333 0.6987])
ans =
1 0 0 0

2 fix函数,向0取整,在参数>0的时候,效果等同于floor;在参数<0的时候,效果不同,例如:

>> fix([1.0000 0.0000 0.3333 0.6987]) % >0, 等同 floor
ans =
1 0 0 0

>> floor([-1.0000 -0.0000 -0.3333 -0.6987]) % 向下取整
ans =
-1 0 -1 -1

>> fix([-1.0000 -0.0000 -0.3333 -0.6987]) % <0, 向0取整,不同于floor
ans =
-1 0 0 0

所以,根据你的描述,你需要的应该是fix函数,效果是直接砍去小数部分。

补充:
你再看一下你生成的double数据,看看那几个1.0000是不是因为精度问题显示成1.0000而其实是0.99999999这样的数据。根据你的例子中的0.3333和0.6667,我怀疑正是这个原因,导致像0.99999999这样的数显示成了1,比如我做的这个试验:
>> a=0.99999
a =
1.0000
>> fix(a)
ans =
0
也许你可以根据你的数据精度,适当加上一个不影响结果而又很小的小数,然后再fix,或者干脆接受这样的很多位小数被砍为0的事实。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-29
在matlab中,下面的语句: x=8:81:811;的意思就是对8到811之间,每81在C#中没有这样的命令 此时的X在C#中应该称为数组,可以使用for循环进行
相似回答