2013-06-27 4 views
1

J'ai un champ -Comment supprimer les virgules de l'entrée flottante?

:Revenue 

et il devrait accepter des valeurs comme 10,000.00, mais si je entrée cette valeur il stocke 10 dans la base de données au lieu de 10000.00

Que dois-je faire pour enlever des virgules avant enregistrer?

J'ai essayé de trouver quelques solutions en ligne mais je n'ai pas réussi à les implémenter car je les ai trouvées incomplètes. Si quelqu'un pouvait m'aider, je l'apprécierais vraiment.

** Le problème auquel je suis confronté est que dès que j'entre, les rails de valeur convertissent la chaîne en valeur flottante avant de pouvoir exécuter la fonction gsub, comme si j'écrivais 50,000.00 sa conversion en float 50.0 avant d'appeler le gsub , existe-t-il un moyen de contourner la méthode to_f que rails appelle sur la chaîne.

+3

Quelles étaient ces solutions «incomplètes»? – devnull

+0

Utilisez-vous Rails? – lurker

+0

oui en utilisant les rails 3 –

Répondre

12

Suppression des virgules est assez simple:

value.gsub(/,/, '').to_f 

Gardez à l'esprit que la mise en forme européenne utilise souvent la virgule comme séparateur de valeur décimale de sorte que vos résultats seront hors d'un facteur 100 si le traitement de ces sortes de chiffres.

+2

Sauf si vous pouvez garantir qu'il y aura au moins une virgule, vous ne voudrez pas utiliser la méthode bang, sinon votre valeur passera de 10.000.00 à 0. – vgoff

+0

"NoMethodError Exception: méthode non définie' gsub 'pour 50.0: Float "si J'entre quelque chose comme 50,000.00 –

+0

Mis à jour pour utiliser 'gsub' car @vgoff est juste ici. – tadman

3

Vous pouvez prendre un String#delete.

"10,000,000.00".delete(',').to_f 
# => 10000000.0 
+1

Cela a le même problème que gsub! Si vous ne pouvez pas garantir qu'il y aura une virgule, vous obtiendrez 0 plutôt que 10 millions. – vgoff

+0

le problème est dès que entrez 10.000.0 et cliquez sur soumettre, il convertit en un flotteur de sorte qu'il devient 10, je veux utiliser gsub ou supprimer dans ce cas avant que cela se produise –

+0

@vgoff a changé le poste .. Merci pour votre commentaire. –

1

J'ai trouvé la solution après avoir regardé quelques endroits et en combinant quelques solutions, car je devais utiliser gsub avant la mise en relation du modèle doit être fait. J'ai donc créé la méthode dans mon contrôleur et l'ai appelée avant de créer et de mettre à jour l'action. et a écrit le code suivant dans la méthode

params[:record][:Revenue] = params[:record][:Revenue].gsub(/,/,"") 
Questions connexes