Làm tròn BẤT CỨ số Lên / Xuống đến BẤT KỲ khoảng thời gian nào
Bạn có thể dễ dàng làm tròn số thành một khoảng cụ thể bằng cách sử dụng toán tử modulo %%
.
Chức năng:
round.choose <- function(x, roundTo, dir = 1) {
if(dir == 1) { ##ROUND UP
x + (roundTo - x %% roundTo)
} else {
if(dir == 0) { ##ROUND DOWN
x - (x %% roundTo)
}
}
}
Ví dụ:
> round.choose(17,5,1) #round 17 UP to the next 5th
[1] 20
> round.choose(17,5,0) #round 17 DOWN to the next 5th
[1] 15
> round.choose(17,2,1) #round 17 UP to the next even number
[1] 18
> round.choose(17,2,0) #round 17 DOWN to the next even number
[1] 16
Làm thế nào nó hoạt động:
Toán tử modulo %%
xác định phần còn lại của phép chia số đầu tiên cho số thứ 2. Việc cộng hoặc trừ khoảng thời gian này vào số sở thích của bạn về cơ bản có thể 'làm tròn' con số thành một khoảng bạn chọn.
> 7 + (5 - 7 %% 5) #round UP to the nearest 5
[1] 10
> 7 + (10 - 7 %% 10) #round UP to the nearest 10
[1] 10
> 7 + (2 - 7 %% 2) #round UP to the nearest even number
[1] 8
> 7 + (100 - 7 %% 100) #round UP to the nearest 100
[1] 100
> 7 + (4 - 7 %% 4) #round UP to the nearest interval of 4
[1] 8
> 7 + (4.5 - 7 %% 4.5) #round UP to the nearest interval of 4.5
[1] 9
> 7 - (7 %% 5) #round DOWN to the nearest 5
[1] 5
> 7 - (7 %% 10) #round DOWN to the nearest 10
[1] 0
> 7 - (7 %% 2) #round DOWN to the nearest even number
[1] 6
Cập nhật:
Phiên bản 2 đối số thuận tiện :
rounder <- function(x,y) {
if(y >= 0) { x + (y - x %% y)}
else { x - (x %% abs(y))}
}
y
Giá trị dương roundUp
, trong khi y
giá trị âm roundDown
:
# rounder(7, -4.5) = 4.5, while rounder(7, 4.5) = 9.
Hoặc là....
Chức năng tự động làm tròn LÊN hoặc XUỐNG dựa trên các quy tắc làm tròn tiêu chuẩn:
Round <- function(x,y) {
if((y - x %% y) <= x %% y) { x + (y - x %% y)}
else { x - (x %% y)}
}
Tự động làm tròn nếu x
giá trị >
nằm giữa các lần xuất hiện tiếp theo của giá trị làm tròn y
:
# Round(1.3,1) = 1 while Round(1.6,1) = 2
# Round(1.024,0.05) = 1 while Round(1.03,0.05) = 1.05