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
Es funktioniert wie erwartet mit der BigDecimal-Bibliothek
require 'bigdecimal'
if BigDecimal(@item.price) < 1
#Schreiben Sie etwas Verarbeitung
end
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.
・ 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