2015-05-03 6 views
8

Bitte können Sie helfen, dieses Problem zu lösen:Manchmal Zahl gerundet sind nicht konsistent

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

ich immer 0,5s entweder nach oben oder nach unten zu bekommen. Beliebige Lösung

+0

'floor' oder' ceiling'? – Khashaa

+0

Ich kenne sie, es tut mir leid. Wir haben keine Ahnung von Zahlen, aber wenn wir 0.5s in Daten haben, möchte ich immer entweder auf oder ab – user1309

+3

Runden auf sogar ist eine grundlegende mathematische Regel – rawr

Antwort

13

Dies ist ein weiteres Beispiel für R-FAQ 7.31 (link to the FAQ on your device) ...... . Wenn Sie immer möchten, dass Gleitkommazahlen, die von print.default als x.5 angezeigt werden, "aufrunden", dann müssen Sie ein bisschen "fuzz" hinzufügen. Ich habe diese Menge an Fuzz so gewählt, dass sie der Genauigkeit entspricht, mit der print.default normalerweise Zahlen anzeigt.

> round(30.5 +0.00000001) 
[1] 31 

Um dies in einer Funktion geschehen:

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

Sie könnten auch diese nachzudenken:

> 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

Danke, können Sie für abrunden empfehlen – user1309

+4

Chnage die mathematische Operation zu ''-'' –

+0

Vielen Dank für Ihre Hilfe – user1309

0

Eine Lösung, die kein Druckformat abhängig Offset benötigt:

Um sich immer aufzurunden, verwenden Sie

ceiling(x - 0.5) 

Um immer abrunden, verwenden

floor(x + 0.5) 
Verwandte Themen