2009-07-07 8 views
41

में दशमलव के साथ एक स्ट्रिंग को पूर्णांक में कनवर्ट करें मेरे पास प्रारूप में एक स्ट्रिंग है: पायथन में 'nn.nnnnn', और मैं इसे एक पूर्णांक में परिवर्तित करना चाहता हूं।पायथन

प्रत्यक्ष रूपांतरण विफल रहता है:

>>> s = '23.45678' 
>>> i = int(s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '23.45678' 

मैं का उपयोग करके एक दशमलव को रूपांतरित कर सकते हैं: '।'

>>> from decimal import * 
>>> d = Decimal(s) 
>>> print d 
23.45678 

मैं भी पर विभाजित किया जा सकता है, तो शून्य से दशमलव घटाना है, तो जोड़ने कि पूरी संख्या में ... यक।

लेकिन मैं इसे अनावश्यक प्रकार के रूपांतरण या हस्तक्षेप के बिना एक int के रूप में रखना पसंद करूंगा।

+10

मैट, 23.45678 एक पूर्णांक नहीं है। यदि आप पाइथन को स्ट्रिंग को एक पूर्णांक में कनवर्ट करना चाहते हैं, तो सुनिश्चित करें कि आप इसे एक पूर्णांक दें। तर्कों को "सही" चीज़ के बारे में कोई भी तरीका बनाया जा सकता है, और अंत में कोई दुखी होने जा रहा है। – Christopher

उत्तर

88

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

>>> s = '23.45678' 
>>> int(float(s)) 
23 

या ...

>>> int(Decimal(s)) 
23 

या ...

>>> int(s.split('.')[0]) 
23 

मुझे शक है यह है कि तुलना में बहुत सरल हो रहा है, मुझे डर लग रहा। बस इसे स्वीकार करें और आगे बढ़ें।

+3

'दशमलव आयात करें' को याद रखें, फिर इसे 'दशमलव। दशमलव (5)' के रूप में उपयोग करें या 'दशमलव आयात दशमलव से' करें और इसे 'दशमलव (5) 'के रूप में उपयोग करें। मैं हमेशा भूल जाता हूँ। – teewuane

+0

आपको मूल्य के प्रत्येक विकल्प ऑफ़र को गोल करने के प्रकार को नोट करना चाहिए। – Rapnar

1

आप इस्तेमाल कर सकते हैं:

s = '23.245678' 
i = int(float(s)) 
13

व्यवहार गोलाई किस तरह आप करना चाहते हैं? आप 2.67 3, या 2. आप राउंडिंग उपयोग करना चाहते हैं में बदलने के लिए है, इस प्रयास करें: अन्यथा

s = '234.67' 
i = int(round(float(s))) 

, बस कार्य करें:

s = '234.67' 
i = int(float(s)) 
2

"कन्वर्ट" केवल समझ में आता है जब आप से बदल निष्ठा के नुकसान के बिना एक डेटा प्रकार दूसरे। स्ट्रिंग द्वारा प्रतिनिधित्व की गई संख्या एक फ्लोट है और एक int में मजबूर होने पर सटीकता खो जाएगी।

आप इसके बजाय गोल करना चाहते हैं, शायद (मुझे उम्मीद है कि संख्या मुद्रा का प्रतिनिधित्व नहीं करती है क्योंकि गोलिंग पूरी तरह से जटिल हो जाती है)।

round(float('23.45678')) 
3
>>> s = '23.45678' 
>>> int(float(s)) 
23 
>>> int(round(float(s))) 
23 
>>> s = '23.54678' 
>>> int(float(s)) 
23 
>>> int(round(float(s))) 
24 

अगर आप चाहते हैं गोलाई या नहीं आप निर्दिष्ट नहीं करते ...

0
round(float("123.789")) 

आप एक पूर्णांक मूल्य दे देंगे, लेकिन एक नाव प्रकार। पाइथन के बतख टाइपिंग के साथ, हालांकि, वास्तविक प्रकार आमतौर पर बहुत प्रासंगिक नहीं होता है। यह उस मूल्य को भी गोल करेगा, जिसे आप नहीं चाहते हैं। 'Int' के साथ 'राउंड' को बदलें और आपको इसे छोटा कर दिया जाएगा और एक वास्तविक int। इस तरह:

int(float("123.789")) 

लेकिन, फिर, वास्तविक 'प्रकार' आमतौर पर महत्वपूर्ण नहीं है।

1

अभिव्यक्ति int(float(s)) दूसरों द्वारा उल्लिखित अभिव्यक्ति सर्वोत्तम है यदि आप मूल्य को कम करना चाहते हैं।यदि आप गोल करना चाहते हैं, तो का उपयोग करके यदि राउंड एल्गोरिदम आप जो चाहते हैं उससे मेल खाता है (round documentation देखें), अन्यथा आपको Decimal और उसके गोल करने वाले एल्गोरिदम का उपयोग करना चाहिए।