it-swarm.com.de

ermittelt einen Bruchteil einer Dezimalzahl

Ich versuche, einen Bruchteil einer Dezimalzahl in Rails zu erhalten. Zum Beispiel habe ich eine Nummer, die "1.23" und ich möchte "23". Es ist vielleicht zu einfach, aber hat jemand eine Idee, wie ich das machen kann?

22
yagmurdursun

Ich bin mir nicht sicher, ob dies der einfachste Weg ist - aber Sie können die Nummer einfach mit "." Charakter - wie folgt:

number = 1.23
parts = number.to_s.split(".")
result = parts.count > 1 ? parts[1].to_s : 0
9
EfratBlaier

Versuchen Sie, die Modulo-Methode zu verwenden:

1.23.modulo(1) => 0.23

Lesen Sie hier mehr: http://www.Ruby-doc.org/core-1.9.3/Numeric.html#method-i-modulo

Oder Sie können float in integer konvertieren und vom ursprünglichen float-Wert subtrahieren.

1.23 - 1.23.to_i => 0.23
48
Eugene Dorian
n = 1.23

n.modulo(1)
=> 0.22999999999999998

n - n.to_i
=> 0.22999999999999998

Empfohlen zu lesen http://floating-point-gui.de/

8
Jonas Elfström

Um die richtige Lösung zu finden, müssen Sie den Typ verstehen, mit dem Sie arbeiten. Wenn Ihre Werte Float sind (der Standardtyp für Nicht-Ganzzahlen in Ruby), können logisch korrekte Antworten wie mod(1) aufgrund von Gleitkommafehlern zu unerwarteten Ergebnissen führen. In allen Fällen, in denen Float der richtige Datentyp ist, ist dies wahrscheinlich akzeptabel.

Wenn Gleitkommafehler nicht akzeptabel sind, verwenden Sie nicht Float! Ruby enthält die großartige Klasse BigDecimal , die auf Kosten der Leistung und einer etwas ausführlicheren Syntax viel genauer ist.

decimal = BigDecimal.new("1.23")
decimal.frac #=> 0.23
4
bloudermilk

wenn Sie Ihre gewünschte Präzision kennen, ist diese Lösung möglicherweise ein bisschen schneller.

1.1234.modulo(1).round(4) #0.1234
3
bioffe
 a=1.23 #value of a will be 1.23
 a=a-a.to_i #value of a will be 0.23
1
dsk

Nachdem ich alles ausprobiert habe, ist (num - num.to_i).abs die beste Antwort, da es auch für negative Zahlen funktioniert.

z.B.

(1,23 - 1,23 bis i) .abs = 0,23

(-1,23 - -1,23.to_i) .abs = 0,23

0
slindsey3000

... "1.23" und ich möchte "23" bekommen.

Entfernen Sie einfach den ganzzahligen Teil und multiplizieren Sie mit 100.

((number - number.to_i) * 100).to_i
0
Lucas Castro