【问题标题】: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))];
    

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多