2017-07-20 3 views
0

Zum Beispiel, wenn 987 gleich "900" sein soll.Wie kann ich in Ruby immer eine Zahl abrunden?

+0

Willkommen bei SO. Ich würde vorschlagen, stackoverflow.com/help/how-to-ask zu lesen. Es wird Ihnen helfen, solide Fragen zu schreiben, die (hoffentlich) gute Antworten liefern. Und willst du, dass die Zahl abgerundet wird und eine Schnur ist? – orde

+0

Hallo und vielen Dank für den herzlichen Empfang! Eigentlich möchte ich, dass es eine Nummer ist. –

Antwort

6
n = 987 
m = 2 

n.floor(-m) 
    #=> 900 

Integer#floor Siehe: „Wenn die Genauigkeit negativ ist, wird der zurückgegebene Wert eine ganze Zahl mit mindestens ndigits.abs nachgestellten Nullen ist.“

oder

(n/10**m) * 10**m 
    #=> 900 
+0

'n.round (-m)' gibt mir 1.000 statt 900. Könnte 'n.floor (-m)' verwenden, die Negative besser für "immer untergehen" –

+0

@SimpleLime, ja, habe ich 'n. Runde (m) ', also auf meine ursprüngliche Antwort zurückgerollt. Ich werde deinen Vorschlag hinzufügen. Vielen Dank. –

+1

wusste nicht, dass du Negative an diese Methoden weitergeben könntest, bis ich deine gesehen habe und du ein paar Minuten lang auf einigen Variationen davon hin und her gegangen bist, also wäre es unehrlich gewesen, meine eigene Antwort zu posten geringfügiges Detail in einigen bearbeiten Geschichten Ihrer Antwort –

0

Sie können Logarithmen verwenden, um die besten mehrere zu berechnen, indem zu teilen.

def round_down(n) 
    log = Math::log10(n) 
    multip = 10 ** log.to_i 
    return (n/multip).to_i * multip 
    end 

    [4, 9, 19, 59, 101, 201, 1500, 102000].each { |x| 
    rounded = round_down(x) 
    puts "#{x} -> #{rounded}" 
    } 

Ergebnis:

4 -> 4 
9 -> 9 
19 -> 10 
59 -> 50 
101 -> 100 
201 -> 200 
1500 -> 1000 
102000 -> 100000 

Dieser Trick ist sehr praktisch, wenn Sie berechnen müssen auch tick Abstände für Graphen.

Verwandte Themen