কীভাবে আমি ডট এবং কমা দিয়ে একটি স্ট্রিংটি পাইথনের ফ্লোটে রূপান্তর করতে পারি


94

পাইথনে 123,456.908ভাসতে চাইলে আমি কীভাবে একটি স্ট্রিং রূপান্তর করতে পারি 123456.908?


11
এটি করার যথাযথ উপায় হল localeমডিউলটি ব্যবহার করা - অন্য সব কিছুই কেবল একটি খুব বাজে হ্যাক যা আপনাকে ভবিষ্যতে সমস্যার মধ্যে ফেলবে।
নিক বেস্টিন

উত্তর:


134

কেবল এর ,সাথে মুছে ফেলুন replace():

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

15
এটি লোকেলের উপর নির্ভর করে। ফ্রান্সে 98 988 776,65 € জার্মানিতে 9.988.776,65 the মার্কিন যুক্তরাষ্ট্রে 9,988,776.65 ডলার
আলেকজান্দ্রু আর

আপনি যদি সোর্স কোডে কনস্ট্যান্ট লিখছেন এবং এটিকে আরও বেশি পঠনযোগ্য করে তুলতে কমা ব্যবহার করতে চান তবে এই উপায়টি লোকালের চেয়ে বরং অন্য কোনও জায়গায় কোডটি ব্যর্থ করে দেবে। python cd_size = float("737,280,000".replace(',','')) (আমি প্রকৃতপক্ষে ব্যবহার করেছি)
hum3

যদি আপনি উত্স কোডে একটি স্ট্রিং আক্ষরিক ধ্রুবক লিখছেন এবং তারপরে স্পষ্টভাবে এটি পূর্ণসংখ্যা বা ভাসমান রূপে রূপান্তর করছেন, এটি ডিজাইনের সাথে কিছু ভুল হওয়ার লক্ষণ। এমনকি যদি এটির পক্ষ থেকেও রক্ষিত করা যায় - কেবলমাত্র সেই প্রেক্ষাপটের জন্য কোডটি লিখিতভাবে অস্থায়ীভাবে সেট করুন এবং তারপরে ব্যবহারকারীদের ইনপুট পরিচালনা করার সময় আপনার ব্যবহারকারীদের জন্য উপযুক্ত প্রসঙ্গটি পুনরুদ্ধার করুন। সে কারণেই সেখানে setlocaleপ্রথম স্থান রয়েছে।
কার্ল নচেটেল

এটি করবেন না, এটি "123 ,,,, 345"
এএমহর

152

... অথবা কমাগুলিকে ফিল্টার হওয়ার জন্য কমা হিসাবে ব্যবহার করার পরিবর্তে আমরা সামগ্রিক স্ট্রিংটিকে ভাসাটির স্থানীয়করণের ফর্ম্যাটিং হিসাবে বিবেচনা করতে এবং স্থানীয়করণ পরিষেবাগুলি ব্যবহার করতে পারি:

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

4
এখন পর্যন্ত সর্বাধিক পাইথোনিক এবং স্বজ্ঞাত উপায়। +1
অউফউইন্ড

4
উদাহরণগুলির মধ্যে দশমিক বিন্দু এবং অঙ্কের দুটি গ্রুপের অক্ষর উভয়ই অন্তর্ভুক্ত থাকলে আমি এই উত্তরটি আপ আপ করব ...
মার্টিনিউ

14
কোনও স্ক্রিপ্টের জন্য দুর্দান্ত, একটি লাইব্রেরির জন্য খারাপ:Extension modules should never call setlocale()
ব্লুফাস্ট

13
@wanderer কি অবচিত হল atof স্ট্রিং builtin পদ্ধতি । আমি এখানে যা ব্যবহার করছি তা হ'ল স্ট্যান্ডার্ড লাইব্রেরি মডিউল atofথেকে ফাংশন localeযা একেবারেই অবহেলিত নয়।
কার্ল নচেটেল

4
সে কারণেই তারকা আমদানিগুলি খারাপ - আমি আপনাকে যা প্রয়োজন তা আমদানি করার জন্য বা locale.atof
এটির

8

যদি আপনি লোকেলটি জানেন না এবং আপনি কোনও ধরণের সংখ্যাকে পার্স করতে চান তবে এই 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

7

আপনার যদি দশমিক বিভাজক হিসাবে কমা এবং হাজার হাজার বিভাজকের মতো বিন্দু থাকে তবে আপনি এটি করতে পারেন:

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

আশা করি এটি সাহায্য করবে


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(',', ''))


2

আমি আপনার পক্ষে লিখেছিলাম এমন একটি সহজ উপায়। :)

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

reযেমন একটি কাজের জন্য একটি বড় হাতুড়ি।
রোমান বোদনারচুক

@ জন দো: এখন বেশ ভাল দেখাচ্ছে। আমি float(number)এর বর্ণনামূলক স্পর্শের কারণে পছন্দ করি । +1 ;-)
অউফউইন্ড

4
ফ্রান্সে 9 988 776,65 € জার্মানিতে 9.988.776,65 € মার্কিন যুক্তরাষ্ট্রে 9,988,776.65 ডলার ----> আপনি কি নিশ্চিত যে এটি কাজ করে?
আলেকজান্দ্রু আর

1

শুধু প্রতিস্থাপন ,() প্রতিস্থাপন করুন।

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

টাইপ () আপনাকে দেখায় যে এটি একটি ফ্লোটে রূপান্তরিত হয়েছে


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.