2010-05-06 18 views
43

में कनवर्ट करना मैं सोच रहा हूं कि एक स्ट्रिंग को किसी संख्या में ऋणात्मक चिह्न के साथ बदलने के लिए रेल में सुविधाजनक फ़ंक्शन क्या है। जैसे -1005.32रेल स्ट्रिंग को संख्या

जब मैं .to_f विधि का उपयोग करता हूं, तो संख्या नकारात्मक संकेत और दशमलव भाग को अनदेखा कर 1005 बन जाती है।

+0

क्या आप परिणाम को एक फ्लोट के बजाय int में संग्रहित कर रहे हैं? – Shaji

उत्तर

66

.to_f सही तरीका है।

उदाहरण:

irb(main):001:0> "-10".to_f 
=> -10.0 
irb(main):002:0> "-10.33".to_f 
=> -10.33 

हो सकता है कि आपके स्ट्रिंग एक नियमित रूप से शामिल नहीं है "-" (पानी का छींटा)? या डैश और पहले अंक के बीच एक जगह है?

जोड़ा गया:

क्या आप जानते हैं हैं कि आपके इनपुट स्ट्रिंग एक अस्थायी संख्या की एक स्ट्रिंग संस्करण है, जैसे, "10.2", तो .to_f सबसे अच्छा/सबसे सरल रूपांतरण करने के लिए तरीका है।

यदि आप स्ट्रिंग की सामग्री के बारे में सुनिश्चित नहीं हैं, तो .to_f का उपयोग उस मामले में 0 देगा जहां आपके पास स्ट्रिंग में कोई संख्या नहीं है। यह आपकी इनपुट स्ट्रिंग के आधार पर कई अन्य मूल्य भी देगा। उदाहरण के लिए

irb(main):001:0> "".to_f 
=> 0.0 
irb(main):002:0> "hi!".to_f 
=> 0.0 
irb(main):003:0> "4 you!".to_f 
=> 4.0 

ऊपर .to_f व्यवहार हो सकता है सिर्फ तुम क्या चाहते हैं, यह आपकी समस्या को मामले पर निर्भर करता है।

विभिन्न त्रुटि मामलों में आप जो करना चाहते हैं उसके आधार पर, आप Kernel::Float का उपयोग कर सकते हैं क्योंकि मार्क रशकॉफ सुझाव देता है, क्योंकि यह इनपुट स्ट्रिंग को परिवर्तित करने से पूरी तरह से खुश नहीं होने पर त्रुटि उत्पन्न करता है।

24

आपको संख्या बदलने के लिए Kernel::Float का उपयोग करना चाहिए; अमान्य इनपुट पर, यह इसे बदलने के लिए बस "कोशिश करने" की बजाय एक त्रुटि उठाएगा।

>> "10.5".to_f 
=> 10.5 
>> "asdf".to_f # do you *really* want a zero for this? 
=> 0.0 
>> Float("asdf") 
ArgumentError: invalid value for Float(): "asdf" 
    from (irb):11:in `Float' 
    from (irb):11 
>> Float("10.5") 
=> 10.5 
+4

'इंटीजर' के विपरीत 'फ्लोट()' के बारे में अच्छी चीजों में से एक यह है कि पूर्व '010' से' 8' में परिवर्तित नहीं होता है (इंटेगर '0' से ऑक्टेटल के साथ शुरू होने वाला कुछ मानता है) –

+0

@AndrewGrimm या आप दूसरे तर्क के रूप में सही आधार को पारित कर सकता है: 'पूर्णांक ("010", 10) # => 10' (देखें ['कर्नेल # पूर्णांक'] (http://ruby-doc.org/core/ कर्नेल। एचटीएमएल # विधि-ए-पूर्णांक)) – Ajedi32

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