MATLAB中round函数用法
目录
语法
说明
示例
对矩阵元素四舍五入
四舍五入为指定数量的小数位数
舍入至最近的 100 的倍数
将元素四舍五入为指定数量的有效位数
控制四舍五入时的数字显示方式
指定结值的舍入方向
对持续时间值舍入
round函数的功能是对数据舍入至最近的小数或整数。
语法
Y = round(X)
Y = round(X,N)
Y = round(X,N,type)
Y = round(___,TieBreaker=direction)
Y = round(t)
Y = round(t,unit)
说明
Y = round(X) 将 X 的每个元素四舍五入为最近的整数。在舍入机会均等的情况下,即有元素的十进制小数部分为 0.5(在舍入误差内)时,round 函数会偏离零四舍五入到最接近的具有更大幅值的整数。
Y = round(X,N) 四舍五入到 N 位数:
N > 0:舍入到小数点右侧的第 N 位数。
N = 0:四舍五入到最接近的整数。
N < 0:舍入到小数点左侧的第 N 位数。
Y = round(X,N,type) 指定四舍五入的类型。指定 "significant" 以四舍五入为 N 位有效数(从最左位数开始计数)。在此情况下,N 必须为正整数。
Y = round(___,TieBreaker=direction) 按照 direction 指定的方向对结值进行舍入。在上述语法中的任何输入参数组合后使用此参数。
Y = round(t) 将 duration 数组 t 的每个元素四舍五入到最接近的秒数。
Y = round(t,unit) 将 t 的每个元素四舍五入到指定单位时间的最接近的数。
示例
对矩阵元素四舍五入
将 2×2 矩阵的元素四舍五入到最近的整数。
X = [2.11 3.5; -3.5 0.78];
Y = round(X)
Y = 2×2
2 4
-4 1
四舍五入为指定数量的小数位数
将pi四舍五入为最近的 3 位小数。
Y = round(pi,3)
Y = 3.1420
舍入至最近的 100 的倍数
将数值 863178137 四舍五入为 100 的最近倍数。
round(863178137,-2)
ans = 863178100
将元素四舍五入为指定数量的有效位数
将向量的元素四舍五入为保留 2 位有效数。
X = [1253 1.345 120.44]
X = 1×3
103 ×
1.2530 0.0013 0.1204
Y = round(X,2,"significant")
Y = 1×3
103 ×
1.3000 0.0013 0.1200
控制四舍五入时的数字显示方式
format 命令控制 MATLAB® 如何在命令行上显示数字。如果一个数组具有以当前格式无法显示的额外位数,则 MATLAB 会自动对该数值进行四舍五入以便显示。与 round 函数结合使用时,此显示可能会导致意外结果。
考虑以下减法运算的结果,将显示 5 位数。
format short
x = 112.05 - 110
x = 2.0500
显示的结果是 2.0500,看起来像结值。然而,由于浮点算术错误,在 0.5 的小数部分的结值不在舍入误差内。
基于 x 的显示值,将 x 四舍五入为 1 位小数应返回 2.1。
y = round(x,1)
y = 2
实际上,此处的问题是 MATLAB 将 x 四舍五入为 5 位数进行显示。round 函数返回正确答案。通过使用 format long 查看 x(这会显示舍入为 15 位数的 x)来确认答案。
format long
x
x =
2.049999999999997
为了进行比较,显示在舍入误差内的结值和不在舍入误差内的结值的舍入结果。
x1 = 2.05
x1 =
2.050000000000000
y1 = round(x1,1)
y1 =
2.100000000000000
x2 = 2.05 - eps(2.05)
x2 =
2.049999999999999
y2 = round(x2,1)
y2 =
2
指定结值的舍入方向
创建一个有结值的小数向量,即小数部分为 0.5(在舍入误差内)的十进制数。
X = -2.5:1:2.5
X = 1×6
-2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000
将结值舍入到最接近的偶数和奇数。
Yeven = round(X,TieBreaker="even")
Yeven = 1×6
-2 -2 0 0 2 2
Yodd = round(X,TieBreaker="odd")
Yodd = 1×6
-3 -1 -1 1 1 3
将结值朝正无穷大和负无穷大方向舍入。
Yplusinf = round(X,TieBreaker="plusinf")
Yplusinf = 1×6
-2 -1 0 1 2 3
Yminusinf = round(X,TieBreaker="minusinf")
Yminusinf = 1×6
-3 -2 -1 0 1 2
将结值朝偏离零方向和朝零方向舍入。
Yfromzero = round(X,TieBreaker="fromzero")
Yfromzero = 1×6
-3 -2 -1 1 2 3
Ytozero = round(X,TieBreaker="tozero")
Ytozero = 1×6
-2 -1 0 0 1 2
对持续时间值舍入
将持续时间数组中的每个值舍入为最近的秒数。
t = hours(8) + minutes(29:31) + seconds(1.3:0.5:2.3);
t.Format = "hh:mm:ss.SS"
t = 1x3 duration
08:29:01.30 08:30:01.80 08:31:02.30
Y1 = round(t)
Y1 = 1x3 duration
08:29:01.00 08:30:02.00 08:31:02.00
将 t 中的每个值舍入为最近的小时数。
Y2 = round(t,"hours")
Y2 = 1x3 duration
08:00:00.00 09:00:00.00 09:00:00.00
提示
-
format short 和 format long 都显示舍入后的数。与 round 函数结合使用时,此显示可能会导致意外结果。
-
出于显示的目的,请使用 sprintf 控制字符串形式的数值的准确显示方式。例如,要完全显示 pi 的 2 位小数(不带尾部零),请使用 sprintf("%.2f",pi)。