Comment puis-je vérifier si une valeur est un nombre?
Je veux simplement vérifier si une valeur de retour à partir d'un formulaire champ de texte est un certain nombre à savoir: 12 , 12,5 ou de 12,75. Est-il un moyen simple de le vérifier, en particulier si la valeur est tiré comme un param
?
- euh, la seule chose est que le code fonctionne pour is_a_number? fonctionne avec la seule exception étant .02, ou .3 numéros....
- Je préfère de loin cette solution: stackoverflow.com/questions/5661466/... je ne sais pas pourquoi tant de gens pensent qu'une regexp serait mieux pour cela.
Vous devez vous connecter pour publier un commentaire.
Juste regexp, c'est trivial, et pas la peine de penser au-delà: les
(Fixe, comme par Justin commentaire)
v.to_s =~ /\A[-+]?\d*\.?\d+\z/
.Vous pouvez utiliser
(
Numeric
de travail pour les nombres entiers et décimaux.)Si elle arrive comme une chaîne de caractères que peut contenir une représentation d'un nombre valide, vous pouvez utiliser
et puis
'12'.valid_float?
renvoie true si vous pouvez convertir la chaîne en vigueur float (par exemple avecto_f
).Fixnum
ne semble pas fonctionner avec des flotteurs. Cependant,Numeric
fonctionne très bien. Donc1.234.is_a? Fixnum == false
, mais1.234.is_a? Numeric == true
.1.1.is_a? Numeric
Voir stackoverflow.com/a/17668654/76486pry(main)> '12'.is_a? Numeric => false
'12'
est une Chaîne de caractères. Dans ce cas, vérifier la chaîne avec la Regex ou de toute autre solution possible.is_a? Numeric
travaille également avec BigDecimalJ'ai l'habitude de simplement utiliser Entiers et à virgule flottante de ces jours.
Vous pouvez ajouter un:
dans votre modèle.
Voir: http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002172
Il suffit de convertir la chaîne deux fois:
"7" == "7".to_f.to_s #=> false
("7" vs "7.0")num == num.to_i.to_s || num == num.to_f.to_s
Je suggère celui-ci
De la chaîne de valeurs de toujours convertir à 0 avec .to_i