2012-02-22 9 views
27

मैं अजगर में फर्श लेने के दो तरीके पाया है की मंजिल ले रहा है:एक नाव

3.1415 // 1 

और

import math 
math.floor(3.1415) 

पहले दृष्टिकोण के साथ समस्या यह है कि एक नाव वापसी है (अर्थात् 3.0)। दूसरा दृष्टिकोण बेकार और बहुत लंबा लगता है।

क्या पाइथन में फर्श लेने के लिए वैकल्पिक समाधान हैं?

+8

दूसरा चुनें। इसके साथ कुछ भी गलत नहीं है। –

+4

आप हमेशा 'int (3.1415) 'को कॉल कर सकते हैं, लेकिन एक मंजिल के बजाय, यह 0 की ओर घूमता है, जो संख्याओं के लिए एक अलग परिणाम देगा <0। –

+0

http://uncyclopedia.wikia.com/wiki/Pi_equals_exactly_three – wim

उत्तर

42

जब तक आपके संख्या सकारात्मक रहे हैं चाहते हैं, तो आप बस एक int में बदलने का अगले पूर्णांक के लिए नीचे पूर्णांक बनाना कर सकते हैं:

>>> int(3.1415) 
3 

नकारात्मक पूर्णांक के लिए, हालांकि यह दौर में होगा।

+0

गोल करने के लिए कोई भी संख्या (सकारात्मक और नकारात्मक) प्राप्त करने के लिए, अभी भी 'int (n // 1) 'है, जैसे' int (-3.14 // 1)' जो '-4' देता है। बेशक यह केवल तभी उपयोगी होता है जब नकारात्मक संख्याएं दिखाई दे सकती हैं। – zezollo

+0

@zezollo जब तक आप 'int (math.floor (x)) का उपयोग करके अपने कोड के पाठकों को भ्रमित नहीं करना चाहते हैं, तो 1 तक फर्श विभाजन पर बेहतर है, क्योंकि यह तुरंत स्पष्ट होता है कि यह क्या करता है। –

6

दूसरा दृष्टिकोण जाने का तरीका है, लेकिन इसे छोटा करने का एक तरीका है।

from math import floor 
floor(3.1415) 
+2

'मंजिल()' पायथन 3 में एक पूर्णांक देता है, लेकिन पायथन 2 में यह फ्लोट देता है। –

+0

@ यूगेनी, मैं बस यह इंगित कर रहा था कि 'गणित' भाग छोड़ने का कोई तरीका था। मुझे आश्चर्य है कि उन्होंने 'फ्लोट' परिणाम को पहले 'फर्श' से वापस लेने के बारे में शिकायत क्यों नहीं की थी? और 2 से 3 तक उस परिवर्तन के बारे में मुझे सूचित करने के लिए धन्यवाद, मुझे वह नहीं पता था। यह समझ में आता है, 'मंजिल' एक 'int' वापस नहीं कर सका जब तक मनमाने ढंग से आकार पूर्णांक 2.4 में शुरू होने वाली सामान्य स्याही के साथ अंतर-परिवर्तनीय नहीं थे। –

1

int करने के लिए इसे कास्ट यदि आप नहीं करते हैं एक float

int(3.1415 // 1) 
10

आप कम पूर्णांक (स्पष्ट रूप से नहीं मंजिल लेकिन और अधिक सुरुचिपूर्ण)

int(3.745) #3 

वैकल्पिक रूप से फर्श परिणाम पर पूर्णांक कॉल करने के लिए कास्ट करने के लिए int() नाव पर कॉल कर सकते हैं।

from math import floor 

f1 = 3.1415 
f2 = 3.7415 

print floor(f1)  # 3.0 
print int(floor(f1)) # 3 
print int(f1)   # 3 
print int(f2)   # 3 (some people may expect 4 here) 
print int(floor(f2)) # 3 

http://docs.python.org/library/functions.html#int

+1

लोगों को 'int (f2)' के लिए '4' क्यों उम्मीद होगी? – Randomblue

+1

क्योंकि आप इसे निकटतम int तक घूमने की उम्मीद कर सकते हैं जो कम int नहीं है। –

+2

ओपी पायथन 3.x का उपयोग कर रहा है, जो पोस्ट से काफी स्पष्ट नहीं है। पायथन 3.x में, 'math.floor()' एक 'int' देता है, इसलिए वापसी मान को परिवर्तित करना आवश्यक नहीं है। –

3

खबरदार कि मंजिल ले रहे हैं और किसी पूर्णांक पर कास्टिंग ऋणात्मक संख्याओं के साथ एक ही बात नहीं कर रहे हैं। यदि आप वास्तव में फर्श को पूर्णांक के रूप में चाहते हैं, तो आपको math.floor() को कॉल करने के बाद int में डालना चाहिए।

>>> int(-0.5) 
0 
>>> math.floor(-0.5) 
-1.0 
>>> int(math.floor(-0.5)) 
-1 
संबंधित मुद्दे