round
舍入至最近的小数或整数
语法
说明
Y = round(
将 X
)X
的每个元素四舍五入为最近的整数。在舍入机会均等的情况下,即有元素的十进制小数部分为 0.5
(在舍入误差内)时,round
函数会偏离零四舍五入到最接近的具有更大幅值的整数。
示例
对矩阵元素四舍五入
四舍五入为指定数量的小数位数
舍入至最近的 100 的倍数
将元素四舍五入为指定数量的有效位数
将向量的元素四舍五入为保留 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
输入参数
X
— 输入数组
标量 | 向量 | 矩阵 | 多维数组 | 表 | 时间表
输入数组,指定为标量、向量、矩阵、多维数组、表或时间表。对于复数 X
,round
会分开处理实部和虚部。
当将 round
与多个输入结合使用时,X
必须为 single
、double
、table
或 timetable
。
round
将逻辑值和 X
的 char
元素转换为 double
值。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| logical
| table
| timetable
复数支持: 是
N
— 位数
整数标量
位数,指定为整数标量。当指定 N
时,round(X,N)
函数将 X
四舍五入为 10—N 的最近倍数。
如果指定 "significant"
四舍五入类型,则 N
必须为正整数。
type
— 四舍五入类型
"decimals"
(默认) | "significant"
四舍五入类型,指定为 "decimals"
或 "significant"
。四舍五入类型确定 round
是基于小数点相关位数还是全部有效位数。指定 "significant"
时,N
必须为正整数。在这种情况下,round
函数四舍五入到具有 N
个有效位数的最近数值。
默认值为 "decimals"
,这样 round(X,N,"decimals")
等同于 round(X,N)
。
示例: round(3132,2,"significant")
返回 3100
,它是具有 2
位有效位数的、最接近 3132
的数。
数据类型: char
| string
direction
— 结值处理方向
"fromzero"
(默认) | "tozero"
| "even"
| "odd"
| "plusinf"
| "minusinf"
结值处理方向,指定为以下值之一:
"fromzero"
- 将结值朝偏离零的方向舍入到模更大的最接近的整数。"tozero"
- 将结值朝零方向舍入到模更小的最接近的整数。"even"
- 将结值舍入到最接近的偶数。"odd"
- 将结值舍入到最接近的奇数。"plusinf"
- 将结值朝正无穷大方向舍入到更大的最接近的整数。"minusinf"
- 将结值朝负无穷大方向舍入到更小的最接近的整数。
结值很少见。在使用 round(X,N,TieBreaker=direction)
时,仅当 X * 10N 在两个连续整数中间点的舍入误差内时(即 X * 10N 的十进制小数部分为 0.5
(在舍入误差内)),才会出现结值。
示例: round(2.015,2,TieBreaker="even")
t
— 输入持续时间
duration
数组
输入持续时间,指定为一个 duration
数组。
unit
— 时间单位
"seconds"
(默认) | "minutes"
| "hours"
| "days"
| "years"
时间单位,指定为 "seconds"
、"minutes"
、"hours"
、"days"
或 "years"
。1 年的时间长度确切地等于 365.2425 天(一天 24 小时)。
数据类型: char
| string
提示
format short
和format long
都显示舍入后的数。与round
函数结合使用时,此显示可能会导致意外结果。出于显示的目的,请使用
sprintf
控制字符串形式的数值的准确显示方式。例如,要完全显示pi
的 2 位小数(不带尾部零),请使用sprintf("%.2f",pi)
。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
此函数完全支持 tall 数组。有关详细信息,请参阅 tall 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
代码生成仅支持语法
Y = round(X)
。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
代码生成仅支持语法
Y = round(X)
。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持以下语法:
Y = round(X,N)
Y = round(X,N,type)
Y = round(___,TieBreaker=direction)
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2023a: 直接对表和时间表执行计算
round
函数可以对表或时间表中的所有变量执行计算,而无需通过索引访问这些变量。所有变量都必须具有支持计算的数据类型。有关详细信息,请参阅Direct Calculations on Tables and Timetables。
R2022a: 控制结值处理行为
使用 TieBreaker
名称-值参量指定如何处理结值。例如,round(X,TieBreaker="tozero")
将结值朝零方向舍入。
R2022a: round
返回一致的结值处理结果
从 R2022a 开始,默认情况下,round
函数始终将结值朝偏离零的方向舍入为模更大的最接近的 10—N 的倍数。例如:
X = 1.015:5.015; N = 2; Y = round(1.015:5.015,2)
Y = 1.0200 2.0200 3.0200 4.0200 5.0200
在以前的版本中,默认情况下,round
函数有时会返回不一致的结值处理结果。例如,在前面的示例中,第二个和第三个元素分别朝零方向舍入为 2.01
和 3.01
。
R2014b: 舍入到指定的位数
R2014b 中添加了下列语法,从而可以舍入取整到任意小数位数或有效位数,还可以舍入持续时间值:
Y = round(X,N) Y = round(X,N,type) Y = round(t) Y = round(t,unit)
MATLAB® 的早期版本只支持下面的语法,该语法舍入到最接近的整数:
Y = round(X)
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)