web-dev-qa-db-fra.com

ruby on Rails comment gérer NaN

J'ai lu quelques articles concernant NaN mais je n'ai pas compris comment y faire face dans Ruby on Rails. Je veux vérifier une valeur s'il s'agit d'un NaN Je veux le remplacer par Zero (0). J'ai essayé ce qui suit

logger.info(".is_a? Fixnum #{percent.is_a? Fixnum}")

quand pour cent a NaN cela me renvoie faux.

J'ai fait quelques changements dans l'enregistreur

logger.info("Fixnum #{percent.is_a? Fixnum} percent #{percent}")

Production

Fixnum false percent 94.44444444444444
Fixnum false percent NaN
Fixnum false percent 87.0
43
Paul Phoenix

NaN est une instance de Float. Utilisation Float#nan? méthode.

>> nan = 0.0/0 # OR nan = Float::NAN
=> NaN
>> nan.class
=> Float
>> nan.nan?
=> true
>> nan.is_a?(Float) && nan.nan?
=> true
>> (nan.is_a?(Float) && nan.nan?) ? 0 : nan
=> 0

[~ # ~] mise à jour [~ # ~]

NaN peut également être une instance de BigDecimal :

((nan.is_a?(Float) || nan.is_a?(BigDecimal)) && nan.nan?) ? 0 : nan

ou

{Float::NAN => 0, BigDecimal::NAN => 0}.fetch(nan, nan)
91
falsetru