MATLAB - 整数与小数分配奇怪的bug

时间:2012-03-05 21:09:35

标签: matlab variable-assignment

newT = [b(i) d(i) a(i) z(i)];
newT, b(i), a(i)

打印

newT =

     123         364         123         902

ans =

 1.234e+02

ans =

 1.234e+02

这是什么问题?为什么newT中的第一个和第三个条目舍入为整数值?为什么他们没有正确分配?

1 个答案:

答案 0 :(得分:3)

与大多数其他编程语言不同,Matlab中的整数类型优先于浮点类型。当你通过连接或算术组合它们时,浮点值被隐式缩小为整数,而不是整数被加宽到浮点。

>> int32(3) + 0.4
ans =
           3
>> [int32(3)  0.4]
ans =
           3           0

这是出于历史原因,因为(IIRC)Matlab最初根本不支持整数,因此Matlab中的所有数字常量都会生成双值,并且创建了促销规则以使整数类型与浮点常数。

要解决此问题,请在连接之前将这些int类型显式转换为双精度。

newT = [b(i) double(d(i)) a(i) double(z(i))];