MATLAB数据类型决定数值、文本、逻辑值等如何存放。默认写下的普通数字多半是 double,即便看起来像整数。字符用 char(或较新的 string,入门仍常见 char),不同类型混在一张表里时,常用元胞数组 cell。班级名册这类混合数据,正好把几类类型串起来看。
先看几个类型
score = 88.5 % 成绩:双精度
class(score) % double
number = 12 % 看起来像整数
isinteger(number)% 0(false)
words = 'pass' % 字符数组
class(words) % char常见误区是:字面量 12 默认仍是 double,不是整数类型。需要真正的整型时,应显式转换,例如 int32(12)。
常用类型一览
| 类型 | 说明 | 例子 |
|---|---|---|
double | 双精度浮点,默认数值类型 | x = 3.14 |
single | 单精度浮点,更省内存 | single(3.14) |
int8 … int64 | 有符号整数 | int32(12) |
uint8 … uint64 | 无符号整数 | uint8(200) |
logical | 逻辑值 1/0 | x > 10 |
char | 字符数组 | 'Ada' |
cell | 元胞数组,各格类型可不同 | {'a', 3.14} |
struct | 结构体,按字段名存数据 | s.name = 'Ada' |
混合数据:元胞数组
普通数值矩阵要求元素类型一致。学号、姓名、成绩混在一起时,可用 cell:
roster = {1, 'Ada', 88.5;
2, 'Bob', 91.0;
3, 'Cindy', 78.0}roster{2, 3} % Bob 的成绩,91取出元胞里的内容用花括号 {},这与普通矩阵用圆括号 () 索引的习惯不同。
类型转换
| 函数 | 作用 |
|---|---|
double(x) | 转双精度 |
int32(x) uint8(x) | 转整数 |
char(x) | 转字符数组 |
num2str(x) | 数字转字符串 |
str2double(s) | 字符串转数字 |
logical(x) | 转逻辑值 |
转为整数类型时,MATLAB 会对小数做四舍五入,而不是一律向零截断。例如 uint32(789.50) 得到 790:
rn = 5678.92347;
c = int32(rn) % 5679class 与 is* 判断
class(3) % 'double'
isnumeric(3) % 1
isinteger(3) % 0
ischar('hi') % 1
isscalar(5) % 1
isvector([1 2]) % 1class 给出类型名。isnumeric、isinteger、ischar 等按特征返回逻辑值,注意 isinteger(3) 为假,因为字面量 3 仍是 double。
选用时怎么想
- 连续测量值、成绩、身高等,多用
double。 - 需要固定位宽整数时,再转成
int32等整型。 - 带前导零的编号,常存成字符。
- 是否及格这类二值结果,用
logical更合适。
下一章进入向量与矩阵后,这些类型会反复出现。