Comment faire pour convertir un nombre décimal en chaîne de la valeur pour les dollars et les cents en ruby?
Je suis le stockage d'un coût de mon application. Le coût n'est pas formaté dans la base de données. Par exemple: 00.00 enregistre en tant que 0, 1.00 enregistre que 1, et 40.50 permet d'économiser de 40,5
J'ai besoin de lire ces valeurs à partir de la base de données et de les convertir en chaînes pour les dollars et les cents. Par exemple: 0 --> cost_dollars = "00" & cost_cents = "00", 1 --> cost_dollars = "01" & cost_cents = "00", 40.5 --> cost_dollars = "40" & cost_cents = "50".
Est-il un moyen facile de le faire en ruby on rails? Ou faut-il un code qui fait cela?
Merci!
OriginalL'auteur Tony | 2009-04-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez accomplir cela avec ce petit bout de code en Ruby:
Dans le spécificateur de format (
%05.2f
),0
signifie garniture gauche avec des zéros,5
l'utilisation remplissage lorsque la chaîne est à moins de 5 caractères (y compris le point décimal),.2
signifie exactement deux caractères après le point décimal,f
signifie en virgule flottante. Full specOriginalL'auteur mipadi
Si vous essayez de formater les valeurs en dollars dans une vue, vous devriez regarder
number_to_currency
dans ActionView::Assistants::NumberHelper.Comme pour rompre la valeur dans distinct, des dollars et des cents, ma première question serait: "Pourquoi?" Si vous avez une bonne raison, et vous avez à traiter avec des décimales dans votre base de données, vous pouvez effectuer les opérations suivantes.
OriginalL'auteur jdl
number_to_currency
est agréable, mais il peut être coûteux; vous pouvez rouler votre propre si vous avez besoin d'appeler un lot.Vous devez être conscient que l'utilisation d'un flotteur pour stocker de la monnaie peut être problématique (et voir) si vous faites beaucoup de calculs sur la base de ces valeurs. Une solution consiste à utiliser des entiers pour la monnaie et de compter les centimes. Cela semble être l'approche utilisée par le l'argent plugin. Une autre solution est d'utiliser un
decimal
type dans votre migration, qui devrait fonctionner out-of-the-box pour les versions modernes de Rails (> 1.2):(
:scale
le nombre de places est passé de la virgule,:precision
est le nombre total de chiffres.) Cela vous aidera à BigDecimal objets dans les Rails, qui sont un peu plus difficile à travailler, mais pas trop mauvais.À la fois l'entier et décimal approches sont un peu plus lent qu'en virgule flottante. Je suis en utilisant des flotteurs pour la monnaie, dans certains endroits, parce que je sais que je ne suis pas besoin de faire des calculs sur les valeurs à l'intérieur des Rails, seulement de stocker et de les afficher. Mais si vous avez besoin précis calculs de devise, ne pas utiliser de flotteurs.
OriginalL'auteur Chinasaur
Au lieu de les stocker en tant que nombre décimal, de les stocker en tant que partie intégrante nombre de centimes. Donc 1 dollar est stockée en tant que
100
dans la base de données.Alternativement, si vous n'avez pas l'esprit un peu de performances,'. ' dans la base de données de la valeur. Si elle existe, split sur '.', et d'analyser les pièces comme des nombres entiers.
OriginalL'auteur John Millikin
sprintf est votre ami ici:
cost_dollars
obtient arrondis (qui n'est pas nécessairement ce que vous voulez), etcost_cents
comprend les dollars de plus pour le cents.OriginalL'auteur Pras