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中的第一个和第三个条目舍入为整数值?为什么他们没有正确分配?
答案 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))];