2012-07-13 12 views

उत्तर

163

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

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

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

+0

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

+1

@Abhinay आपके बेंच अंक के बारे में: नमूना आकार? स्ट्रिंग आकार? –

4

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

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

यह बनाता है "1 200 200" ठीक से काम अच्छी तरह से

+8

यहां तक ​​कि बेहतर है '1,1200.00'.gsub (/ [^ 0-9 \।] /,' ')। To_f'। – Hauleth

+7

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

+3

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

1

मैं String#tr का उपयोग करते हैं:

"1,112".tr(',','').to_i # => 1112 
5

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

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

1

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

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

किसी एक अल्पविराम से ज्यादा बाहर उप करने के लिए देख रहा है, तो मैं के एक प्रशंसक रहा हूँ:

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

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

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