कॉमा के साथ स्ट्रिंग को पूर्णांक में बदलें


95

क्या 1 के बजाय "1,112" को पूर्णांक 1112 में बदलने के लिए कोई साफ तरीका है?

मुझे एक मिल गया है, लेकिन साफ ​​नहीं है:

"1,112".split(',').join.to_i #=> 1112

जवाबों:


175

इस बारे में कैसा है?

 "1,112".delete(',').to_i

आपके उत्तर के लिए धन्यवाद। यह मेरी तुलना में बहुत बेहतर है। वास्तव में मैं उम्मीद कर रहा था कि दो के बजाय एक कॉल होगी। जैसे: "1,112" .to_money उत्तरों की समीक्षा करने के बाद, यह संभावना है कि ऐसी कोई विधि नहीं है। वैसे भी, बहुत बहुत धन्यवाद!
mCY

@michealKohi आप मुझे बता सकते हैं कि क्यों हटाएं () gsub में वही करने से ज्यादा तेज है जो रेगेक्स को स्वीकार करता है, मैंने हमेशा सोचा है कि रेगेक्स का रास्ता तेज है। मैंने निष्पादन के समय में अपने अंतर पर बेंचमार्क को चलाया है।
अभिनय

1
@Abhinay अपने बेंच मार्क के बारे में: नमूना आकार? स्ट्रिंग आकार?
माइकल कोहल

5

आप यह भी सुनिश्चित कर सकते हैं कि आपका कोड सही ढंग से स्थानीयकृत हो, या सुनिश्चित करें कि उपयोगकर्ताओं को "अंतर्राष्ट्रीय" नोटेशन के लिए उपयोग किया जाता है। उदाहरण के लिए, "1,112" वास्तव में विभिन्न देशों में विभिन्न संख्याओं का अर्थ है। जर्मनी में इसका अर्थ है एक हजार से कुछ की बजाय एक से थोड़ी अधिक संख्या।

विकिपीडिया लेख के अनुरूप http://en.wikipedia.org/wiki/Decimal_mark पर है । यह इस समय हालांकि खराब लिखा हुआ लगता है। एक चीनी के रूप में उदाहरण के लिए मुझे यकीन नहीं है कि चीन में हजार विभाजक के बारे में ये विवरण कहां से आया है।


4

कुछ और सुविधाजनक

"1,1200.00".gsub(/[^0-9]/,'') 

यह "1 200 200" को ठीक से अस्वस्थ बनाता है


8
और भी बेहतर है '1,1200.00'.gsub(/[^0-9\.]/,'').to_f
हौलेथ

7
रुको, तुम क्यों बदलना चाहते "1,1200.00"हो "1120000"? क्या आप ,(या स्थान के आधार पर .) को बदलना नहीं चाहते हैं ? इसके अलावा, यह इसे एक पूर्णांक या फ्लोट में परिवर्तित नहीं करता है, बस एक स्ट्रिंग बिना सीमांकक के।
ब्रिक

3
@Bryan: एक अनुमान लगाने के लिए, आप बैंकिंग एप्लिकेशन में ऐसा करना चाहते हैं, जब उपयोगकर्ता के पास केवल एक पूर्णांक के साथ सौदा करने के लिए उपयोगकर्ता के पास जो मुद्रा राशि होती है, उसे परिवर्तित करना: उदाहरण के लिए, डॉलर और सेंट को सेंट में परिवर्तित करना । यह विधि फ्लोटिंग-पॉइंट नंबरों से निपटने पर अप्रत्याशित रूप से फ़सल करने वाली किसी भी गोलाई में होने वाली त्रुटियों से बच जाएगी। जब एक मुद्रा राशि को उपयोगकर्ता को दिखाने की आवश्यकता होती है, तो प्रतिशत राशि को डॉलर और सेंट में परिवर्तित किया जा सकता है। (हालांकि यह वह नहीं है जो प्रश्नकर्ता ने पूछा है।)
तीमु लेइस्टी

2
यह उत्तर स्ट्रिंग को पूर्णांक या फ्लोट में बदलने के लिए पूछने वाले के अनुरोध को भी संबोधित नहीं करता है।
एलएस

2

निम्नलिखित एक और तरीका है जो काम करेगा, हालांकि कुछ अन्य तरीकों के साथ यह दशमलव स्थानों को छीन लेगा।

a = 1,112
b = a.scan(/\d+/).join().to_i => 1112


1

अगर कोई अल्पविराम से अधिक उप को देख रहा है तो मैं उसका प्रशंसक हूं:

"1,200".chars.grep(/\d/).join.to_i

प्रदर्शन के बारे में पता नहीं है, लेकिन यह एक से अधिक लचीला है gsub, यानी:

"1-200".chars.grep(/\d/).join.to_i

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.