newT = [b(i) d(i) a(i) z(i)];
newT, b(i), a(i)
打印
新T=
123 364 123 902
答=
1.234e+02
答=
1.234e+02
这里有什么问题吗?为什么 newT 中的第一个和第三个条目四舍五入为整数值?为什么它们没有正确分配?
最佳答案
与大多数其他编程语言不同,Matlab 中的整数类型优先于浮点类型。当您通过串联或算术组合它们时,浮点值会隐式缩小为整数,而不是将整数扩大为浮点。
>> int32(3) + 0.4
ans =
3
>> [int32(3) 0.4]
ans =
3 0
这是出于历史原因,因为(IIRC)Matlab 最初根本不支持整数,因此 Matlab 中的所有数字常量都会产生 double 值,并且创建了提升规则,以便可以将整数类型与浮点常量。
要解决此问题,请在连接之前将这些 int 类型显式转换为 double 。
newT = [b(i) double(d(i)) a(i) double(z(i))];
关于MATLAB - 整数与小数赋值奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574025/