[RAILS] [Ruby] Big Decimal und DECIMAL

Ich habe Spalten vom Typ Dezimal mit Zahlen verglichen, aber es hat nicht wie erwartet funktioniert

def show
  @item = Item.find(params[:id])
  if @item.price < 1 #Preis ist DECIMAL Typ
    #Schreiben Sie etwas Verarbeitung
  end
end

Wenn ich den Typ überprüfe, ist es String. Anscheinend ist Decimal ein Festkommazahlentyp und verarbeitet genauere Werte als Gleitkommatypen. Es scheint also, dass er als Zeichenfolge zurückgegeben wird (natürlich ...?).

 logger.debug(@item.price.class)
 -> String

Ansatz

Es funktioniert wie erwartet mit der BigDecimal-Bibliothek

require 'bigdecimal'

if BigDecimal(@item.price) < 1
    #Schreiben Sie etwas Verarbeitung
end

Was sind Gleitkomma und Festkomma überhaupt?

Float-Typen wie Float können eine große Anzahl von Ziffern verarbeiten. Da die Zahl nach dem Dezimalpunkt jedoch nicht binär ausgedrückt werden kann, tritt ein Fehler auf. → Rundungsfehler

Der Festkommatyp löst dieses Problem, kann jedoch weniger Ziffern verarbeiten als der Gleitkommatyp.

Referenz

・ Https://docs.ruby-lang.org/ja/latest/library/bigdecimal.html ・ Https://qiita.com/jnchito/items/d0ef71b25732ad5a881c ・ Https://qiita.com/angel_p_57/items/24078ba4aa5881805ab2

Recommended Posts

[Ruby] Big Decimal und DECIMAL
Java Big Decimal
Rubin und Edelstein
[Ruby] Klassen und Instanzen
Symbole und zerstörerischer Rubin
Große Dezimalstelle in Kotlin
Ruby-Klassen und -Instanzen
Ruby-Vererbung und -Delegierung
Ruby-Syntaxfehler und Gegenmaßnahmen
Wie man Big Decimal benutzt
Über Ruby-Hashes und -Symbole
Ruby C Erweiterung und flüchtig
Fassen Sie Ruby und Dependency Injection zusammen
[Java] Big Decimal richtig verwenden ~ 2018 ~
Über Ruby und Objektmodell
[Ruby] Singuläre Methoden und singuläre Klassen
Informationen zu Ruby-Klassen und -Instanzen
Ruby-Methoden und -Klassen (grundlegend)
Erstellen von Ruby-Klassen und -Instanzen
[Ruby] Unterschied zwischen get und post
Ruby-Standardeingabe und verschiedene Methoden
Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen
[Ruby-Grundlagen] Split-Methode und to_s-Methode
Informationen zum Ruby-Produktoperator (&) und zum Summenoperator (|)
Schreiben Sie Schlüssel und Werte in Ruby
Upgrade der Ruby- und Rails-Version des Projekts
Über objektorientierte Vererbung und über Ertrag Ruby
[Java] Tipps und Fehlerprobleme beim Konvertieren von Double zu Big Decimal
Mit Rubin ● × Game und Othello (Grundlegende Bewertung)
Aktualisieren und wechseln Sie Ruby-Versionen unter Windows 10
Hinweis: Unterschied zwischen Ruby "p" und "Puts"
Blasensortierung durchführen und mit Ruby sortieren auswählen
Unterschied zwischen Ruby-Instanzvariable und lokaler Variable
[Rubiy] Vereinfache jedes mit Map und Inject
Erläuterung der Ruby Time- und Date-Objekte
Zusammenfassung der Hashes und Symbole in Ruby
[Ruby] Schleifenunterscheidung und Verwendung in Ruby
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
[Einfach] So aktualisieren Sie Ruby und Bundler
Vergleich von JavaScript-Objekten und Ruby-Klassen
Schreiben Sie Code mit Ruby-Klassen und -Instanzen
[Ruby] Unterschied zwischen print, put und p
Lassen Sie sich nicht auf Javas Big Decimal ein
Unterschied zwischen Ruby-Zeichenketten und Symbolen [Anfänger]
Immer im Big Decimal-Memorandum für Anfänger
Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON
[Ruby] Die Berechnungsergebnisse zwischen den Dezimalstellen sind unterschiedlich, unterschiedlich oder nicht so, wie Sie es beabsichtigt haben.