2012-11-13 21 views
7

मैं बिंदु या अल्पविराम के रूप में दशमलव विभाजक के रूप में दशमलव संख्या को पढ़ने के लिए पाइथन को स्पष्ट रूप से कैसे बता सकता हूं? मैं पीसी कि मेरी स्क्रिप्ट चलेंगे का स्थानीयकरण सेटिंग्स पता नहीं है, और यह मेरा आवेदन को प्रभावित नहीं करना चाहिए, मैं सिर्फ कहना चाहता हूँ:पाइथन तारों को स्पष्ट रूप से अल्पविरामों के रूप में अल्पविरामों या बिंदुओं का उपयोग करके फ्लोट में कनवर्ट करें

f = read_float_with_point("3.14") 

या

f = read_float_with_comma("3,14") 

मुझे लगता है कि लेखन लगता है

def read_float_with_comma(num): 
    return float(num.replace(",", ".") 

सुरक्षित नहीं है, क्योंकि मुझे लोकेल सेटिंग्स नहीं पता है!

+0

'1,000' क्या है: एक या एक हजार? – katrielalex

+1

@ katrielalex: बिल्कुल, यह लोकेल पर निर्भर करता है। –

उत्तर

9

क्योंकि मैं लोकेल सेटिंग

पता नहीं है

आपको लगता है कि देखो locale module का उपयोग कर सकता है:,

>>> locale.nl_langinfo(locale.RADIXCHAR) 
'.' 

या

>>> locale.localeconv()['decimal_point'] 
'.' 

कि का उपयोग करते हुए अपने कोड बन सकता है:

import locale 
_locale_radix = locale.localeconv()['decimal_point'] 

def read_float_with_comma(num): 
    if _locale_radix != '.': 
     num = num.replace(_locale_radix, ".") 
    return float(num) 

अभी भी बेहतर है, एक ही मॉड्यूल एक रूपांतरण समारोह आप के लिए है, atof() कहा जाता है:

import locale 

def read_float_with_comma(num): 
    return locale.atof(num) 
+0

यह लोकेल सेटिंग्स का उपयोग करेगा, जो शायद नहीं है कि diegogb चाहता है। क्या होगा यदि आपको वर्तमान के रूप में एक अलग लोकेल में डेटा आउटपुट/पार्स करने की आवश्यकता है? लोकेल मॉड्यूल स्पष्ट रूप से लाइब्रेरी में लोकेल को बदलने को हतोत्साहित करता है, इसलिए यह विधि केवल सरल स्क्रिप्ट के लिए मान्य है। – dangonfast

+0

@ jeckyll2hide: सरल स्क्रिप्ट या डेस्कटॉप जीयूआई प्रोग्राम या किसी और चीज के लिए जो एकाधिक (नेटवर्क वाले) ग्राहकों की सेवा करने की आवश्यकता नहीं है। –

+0

@ jeckyll2hide: लेकिन ओपी विशेष रूप से जानना चाहता था कि जिस पीसी पर उसकी लिपि चलती है, वह वही है जो वांछित था। यही कारण है कि ओपी ने इस उत्तर को स्वीकृत के रूप में चिह्नित किया; उनकी समस्या हल हो गई थी। –

1

आप babel उपयोग कर सकते हैं पार्स करने के लिए स्थानीय प्रारूपों में दशमलव:

>>> parse_decimal('1,099.98', locale='en_US') 
Decimal('1099.98') 
>>> parse_decimal('1.099,98', locale='de') 
Decimal('1099.98')