38

से निपटने के लिए मैंने NaN के बारे में कुछ पोस्ट पढ़ी हैं लेकिन रेलवे पर रुबी में इसका निपटारा करने का तरीका नहीं पता था। मैं एक मान जांचना चाहता हूं अगर यह NaN है, तो मैं इसे शून्य (0) से बदलना चाहता हूं। मैंने कोशिश की निम्नलिखितरेल पर रूबी NaN

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

यह मुझे झूठे लौटाता है जब प्रतिशत NaN है।

मैं लकड़हारा

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

आउटपुट

Fixnum false percent 94.44444444444444 
Fixnum false percent NaN 
Fixnum false percent 87.0 

उत्तर

76

NaN में कुछ परिवर्तन किए हैं Float का उदाहरण है। Float#nan? विधि का प्रयोग करें।

>> 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 

अद्यतन

NaN could also be an instance of BigDecimal:

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

या

{Float::NAN => 0, BigDecimal::NAN => 0}.fetch(nan, nan) 
+2

यह भी एक निरंतर रूप में परिभाषित किया गया है: 'फ्लोट :: नेन # => Nan' – steenslag

+0

@steenslag , मुझे यह नहीं पता था। टिप्पणी के लिए धन्यवाद। – falsetru

+2

यदि आप मानक पुस्तकालय के साथ काम कर रहे हैं, तो 'NaN' भी' BigDecimal' का उदाहरण हो सकता है। – chipit24

संबंधित मुद्दे