2015-05-03 10 views
8

Xin vui lòng bạn có thể giúp giải quyết vấn đề này:Đôi khi làm tròn số không phù hợp

round(30.5) 
[1] 30 
round(31.5) 
[1] 32 

Tôi muốn nhận luôn 0.5s hoặc lên hoặc xuống. Bất kỳ giải pháp nào

+0

'floor' hoặc 'ceiling'? – Khashaa

+0

Tôi biết họ, không có gì phải xin lỗi. Chúng tôi không có ý tưởng về số, nhưng khi chúng tôi có 0,5 giây trong dữ liệu, tôi muốn luôn luôn là họ lên hoặc xuống – user1309

+3

làm tròn đến thậm chí là một quy tắc toán học cơ bản – rawr

Trả lời

13

Đây là một ví dụ khác là R-FAQ 7.31 (link to the FAQ on your device) ...... (link to the CRAN version). Nếu bạn luôn muốn số dấu phẩy động được hiển thị bởi print.default là x.5 để "làm tròn" thì bạn cần thêm một chút "fuzz". Tôi đã chọn số lượng fuzz đó tương tự với độ chính xác mà print.default thường hiển thị số.

> round(30.5 +0.00000001) 
[1] 31 

Để thực hiện điều này trong một hàm:

> round.up <- function(x, digits=0) round(x+0.00000001, digits) 
> round.up(30.5) 

Bạn cũng có thể suy nghĩ này:

> 31.5==31.50000000000000001 
[1] TRUE 
> 31.5==31.5000000000000001 
[1] TRUE 
> 31.5==31.500000000000001 
[1] TRUE 
> 31.5==31.50000000000001 
[1] FALSE 

> 31.50000000000001 
[1] 31.5 

> 31.50000001 
[1] 31.5 
> 31.50001 
[1] 31.50001 
+0

Cảm ơn, bạn có thể tư vấn cho vòng xuống – user1309

+4

Chnage hoạt động toán học thành ''-'' –

+0

Cảm ơn bạn rất nhiều vì đã giúp đỡ – user1309

0

Một giải pháp mà không cần một bản in định dạng phụ thuộc offset:

Để luôn làm tròn, hãy sử dụng

ceiling(x - 0.5) 

Để luôn làm tròn xuống, sử dụng

floor(x + 0.5) 
Các vấn đề liên quan