[RAILS] [Ruby] Big Decimal et DECIMAL

J'ai comparé des colonnes de type décimal avec des nombres mais cela n'a pas fonctionné comme prévu

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

approche

Cela fonctionne comme prévu en utilisant la bibliothèque BigDecimal

require 'bigdecimal'

if BigDecimal(@item.price) < 1
    #Ecrire un traitement
end

Que sont la virgule flottante et la virgule fixe en premier lieu?

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.

référence

・ 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 et DECIMAL
Java Big Decimal
Rubis et gemme
[Ruby] Classes et instances
Symboles et rubis destructeur
Grand décimal à Kotlin
Classes et instances Ruby
Héritage et délégation Ruby
Erreurs de syntaxe et contre-mesures Ruby
Comment utiliser Big Decimal
À propos des hachages et symboles Ruby
Extension Ruby C et volatile
Résumer l'injection de rubis et de dépendances
[Java] Utilisez correctement Big Decimal ~ 2018 ~
À propos de Ruby, modèle objet
[Ruby] Méthodes singulières et classes singulières
À propos des classes et des instances Ruby
Méthodes et classes Ruby (basiques)
Création de classes et d'instances Ruby
[Ruby] Différence entre obtenir et publier
Entrée standard Ruby et diverses méthodes
À propos des guillemets simples et doubles Ruby
[Bases de Ruby] méthode split et méthode to_s
À propos de l'opérateur de produit Ruby (&) et de l'opérateur somme (|)
Ecrire des clés et des valeurs dans Ruby
Mise à niveau de la version du projet Ruby and Rails
À propos de l'héritage orienté objet et du rendement Ruby
[Java] Conseils et problèmes d'erreur lors de la conversion du double en grand décimal
Avec ruby ● × Game et Othello (examen de base)
Mettre à niveau et changer de version de Ruby sous Windows 10
Remarque: Différence entre Ruby "p" et "met"
Faire un tri à bulles et sélectionner le tri avec Ruby
Différence entre la variable d'instance Ruby et la variable locale
[Rubiy] Simplifiez chaque utilisation de la carte et injectez
Explication des objets Ruby Time et Date
Résumé des hachages et symboles dans Ruby
[Ruby] Distinction et utilisation des boucles dans Ruby
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
[Facile] Comment mettre à niveau Ruby et le bundler
Comparaison des objets JavaScript et des classes Ruby
Écrire du code à l'aide de classes et d'instances Ruby
[Ruby] Différence entre print, put et p
Ne soyez pas accro au Big Decimal de Java
Différence entre les chaînes de caractères et les symboles Ruby [Débutant]
Mémorandum Big Decimal Always Int pour débutants
Conversion de JSON en TSV et TSV en JSON avec Ruby
[Ruby] Les résultats du calcul entre les points décimaux sont différents, différents ou pas ce que vous vouliez.