मैं एक स्ट्रिंग को डॉट और कॉमा के साथ पायथन में एक फ्लोट में कैसे बदल सकता हूं


86

मैं पायथन में 123,456.908फ्लोट की तरह एक स्ट्रिंग कैसे बदल सकता हूं 123456.908?


9
ऐसा करने का उचित तरीका localeमॉड्यूल का उपयोग करना है - बाकी सब सिर्फ एक बहुत बुरा हैक है जो आपको भविष्य में परेशानी में डाल देगा।
— निक बैस्टिन

जवाबों:


129

बस इसके ,साथ निकालें replace():

float("123,456.908".replace(',',''))

14
यह लोकेल पर निर्भर करता है। 9 988 776,65 € फ्रांस में 9.988.776,65 € जर्मनी में $ 9,988,776.65 संयुक्त राज्य अमेरिका में
— अलेक्जेंड्रू आर

यदि आप स्रोत कोड में स्थिरांक लिख रहे हैं और इसे अधिक पठनीय बनाने के लिए अल्पविराम का उपयोग करना चाहते हैं तो यह लोकेल के बजाय जाने का तरीका है जो बाद में कोड को किसी अन्य स्थान पर विफल कर देगा। python cd_size = float("737,280,000".replace(',','')) (मैं वास्तव में int का इस्तेमाल करता था)
— hum3

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

ऐसा न करें, यह "123 ,,, 345" जैसी चीजों के लिए अनुमति देता है
— अमोह्र

148

... या अल्पविराम को कचरे के रूप में छानने के बजाय, हम समग्र स्ट्रिंग को फ्लोट के स्थानीयकृत स्वरूपण के रूप में मान सकते हैं, और स्थानीयकरण सेवाओं का उपयोग कर सकते हैं:

from locale import atof, setlocale, LC_NUMERIC
setlocale(LC_NUMERIC, '') # set to your default locale; for me this is
# 'English_Canada.1252'. Or you could explicitly specify a locale in which floats
# are formatted the way that you describe, if that's not how your locale works :)
atof('123,456') # 123456.0
# To demonstrate, let's explicitly try a locale in which the comma is a
# decimal point:
setlocale(LC_NUMERIC, 'French_Canada.1252')
atof('123,456') # 123.456

3
अधिकांश पायथोनिक और सहज तरीका अब तक। +1
— Aufwind

2
मैं इस उत्तर को वोट करूंगा, यदि उदाहरणों में दशमलव बिंदु और अंक समूहन वर्ण दोनों शामिल हों ...
— Martineau

14
एक स्क्रिप्ट के लिए ठीक है, एक पुस्तकालय के लिए बुरा:Extension modules should never call setlocale()
— ब्लूफैस्ट

12
@wanderer: क्या पदावनत atof तार की अंतर्निहित विधि है । मैं यहां जो उपयोग कर रहा हूं atofवह localeमानक पुस्तकालय मॉड्यूल से फ़ंक्शन है , जो बिल्कुल भी नहीं है।
— कार्ल Knechtel

5
इसलिए स्टार इम्पोर्ट ख़राब है - मैं आपको सुझाव locale.atof
— दूंगा

6

इस बारे में क्या?

 my_string = "123,456.908"
 commas_removed = my_string.replace(',', '') # remove comma separation
 my_float = float(commas_removed) # turn from string to float.

संक्षेप में:

my_float = float(my_string.replace(',', ''))

6

यदि आपके पास दशमलव विभाजक के रूप में अल्पविराम और हजारों विभाजक के रूप में डॉट है, तो आप यह कर सकते हैं:

s = s.replace('.','').replace(',','.')
number = float(s)

आशा है कि यह मदद करेगा


5

यदि आपको लोकल का पता नहीं है और आप किसी भी प्रकार के नंबर को पार्स करना चाहते हैं, तो इस parseNumber(text)फ़ंक्शन का उपयोग करें । यह सही नहीं है लेकिन अधिकांश मामलों को ध्यान में रखें:

>>> parseNumber("a 125,00 €")
125
>>> parseNumber("100.000,000")
100000
>>> parseNumber("100 000,000")
100000
>>> parseNumber("100,000,000")
100000000
>>> parseNumber("100 000 000")
100000000
>>> parseNumber("100.001 001")
100.001
>>> parseNumber("$.3")
0.3
>>> parseNumber(".003")
0.003
>>> parseNumber(".003 55")
0.003
>>> parseNumber("3 005")
3005
>>> parseNumber("1.190,00 €")
1190
>>> parseNumber("1190,00 €")
1190
>>> parseNumber("1,190.00 €")
1190
>>> parseNumber("$1190.00")
1190
>>> parseNumber("$1 190.99")
1190.99
>>> parseNumber("1 000 000.3")
1000000.3
>>> parseNumber("1 0002,1.2")
10002.1
>>> parseNumber("")

>>> parseNumber(None)

>>> parseNumber(1)
1
>>> parseNumber(1.1)
1.1
>>> parseNumber("rrr1,.2o")
1
>>> parseNumber("rrr ,.o")

>>> parseNumber("rrr1rrr")
1


2

यहाँ एक आसान तरीका है जो मैंने आपके लिए लिखा है। :)

>>> number = '123,456,789.908'.replace(',', '') # '123456789.908'
>>> float(number)
123456789.908

reइस तरह के कार्य के लिए एक बड़ा हथौड़ा है।
— रोमन बोडनार्चुक

@ जॉन डो: अब बेहतर लगता है। मुझे float(number)इसके वर्णनात्मक स्पर्श के कारण पसंद है । +1 ;-)
— Aufwind

2
9 988 776,65 € फ्रांस में 9.988.776,65 € जर्मनी में 9,988,776.65 € संयुक्त राज्य अमेरिका में ----> क्या आप सुनिश्चित हैं कि यह काम करता है?
— अलेक्जेंड्रू आर

1

बस के ,साथ बदलें ()।

f = float("123,456.908".replace(',','')) print(type(f)

प्रकार () आपको दिखाएगा कि यह फ्लोट में परिवर्तित हो गया है


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