def show
@item = Item.find(params[:id])
if @item.price < 1 #le prix est de type DECIMAL
#Ecrire un traitement
end
end
Quand je vérifie le type, c'est String. Apparemment, Decimal est un type de nombre à virgule fixe, et comme il gère des valeurs plus précises que le type à virgule flottante, il semble qu'il sera renvoyé sous forme de chaîne de caractères (naturellement ...?)
logger.debug(@item.price.class)
-> String
Cela fonctionne comme prévu en utilisant la bibliothèque BigDecimal
require 'bigdecimal'
if BigDecimal(@item.price) < 1
#Ecrire un traitement
end
Le type Float tel que Float peut gérer un grand nombre de chiffres, mais comme le nombre après la virgule décimale ne peut pas être exprimé en binaire, une erreur se produit. → Erreur d'arrondi
Le type à virgule fixe résout ce problème, mais il peut gérer moins de chiffres que le type à virgule flottante.
・ 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