【问题标题】:MATLAB - integers vs decimals assignment strange bugMATLAB - 整数与小数分配奇怪的错误
【发布时间】:2012-03-05 21:09:34
【问题描述】:
newT = [b(i) d(i) a(i) z(i)];
newT, b(i), a(i)
打印
新T =
123 364 123 902
ans =
1.234e+02
ans =
1.234e+02
这里有什么问题?为什么 newT 中的第一个和第三个条目四舍五入为整数值?为什么没有正确分配?
【问题讨论】:
标签:
matlab
variable-assignment
【解决方案1】:
与大多数其他编程语言不同,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))];