MATLAB中行向量的自动类型转换

MATLAB中行向量的自动类型转换,matlab,octave,matlab-deployment,matlab-compiler,Matlab,Octave,Matlab Deployment,Matlab Compiler,假设我有一个行向量,定义如下: x = [5 6.7 8.9] x = 5 6.7000 8.9000 上面的代码生成一个行向量,所有元素都被类型化为浮点(包括第一个索引中的5) 是否有任何方法可以防止5(首先出现)的类型转换,即是否有任何方法可以获得如下向量: x = [5 6.7 8.9] x = 5 6.7000 8.9000 在Matlab和倍频程中,如果在5之后没有四个小数点,double是所有数值的默认值,即使其中一些值可能是整数(整数)。对于数值

假设我有一个行向量,定义如下:

x = [5 6.7 8.9]
x =

   5  6.7000   8.9000
上面的代码生成一个行向量,所有元素都被类型化为浮点(包括第一个索引中的5)

是否有任何方法可以防止5(首先出现)的类型转换,即是否有任何方法可以获得如下向量:

x = [5 6.7 8.9]
x =

   5  6.7000   8.9000

在Matlab和倍频程中,如果在5之后没有四个小数点,
double
是所有数值的默认值,即使其中一些值可能是整数(整数)。对于数值数组,所有元素必须是同一类型

一般来说,您应该将所有数值保留为双精度,并使用格式化控件(如
printf()
及其朋友提供的控件)按您的意愿显示它们

在这种情况下,您可以执行以下操作:

x=[56.78.9];
printf(“%d%.04f%.04f\n',x);
或者更灵活一些:

printf('%g  ', x); printf('\n');

向量的所有条目必须是同一类型。不管怎样,浮点
double
数据类型包括最大为2^53的整数
2^53
,因此这应该不是问题。您看到的
4.0000
与say
uint32(4)
的值相同(尽管数据类型不同),您不能使用普通数组,但可以使用单元格数组。有趣的是,如果我像
x={5 6.7 8.9}
那样以八度音阶创建一个单元格数组,
5
显示时没有小数点,但它的类仍然是
double
。您只关心这里的可视类型还是实际的类型转换?@adityasani
x={int32(5)6.7 8.9}
(或者您想要的任何整数类型)将创建一个包含一个整数和两个双精度的单元格数组,如果您正在寻找的话。或者您可以创建一个结构。或者两个单独的数组。有很多选项。注意:在这里使用单元格数组(
{…}
)可能会获得您想要的显示格式,但一般来说,使用单元格意味着您的性能会很差。如果可以的话,坚持使用数字。