int(round(x))
इसे गोल करके पूर्णांक में बदल देंगे
संपादित करें:
आप किसी भी चर के लिए int (राउंड (h)) असाइन नहीं कर रहे हैं। जब आप इंट (राउंड (एच)) कहते हैं, तो यह पूर्णांक संख्या देता है लेकिन कुछ और नहीं करता है; आपको उस पंक्ति को बदलना होगा:
h = int(round(h))
H को नया मान निर्दिष्ट करने के लिए
संपादित करें 2:
जैसा कि @plowman ने टिप्पणी में कहा, पाइथन round()काम नहीं करता है क्योंकि एक सामान्य रूप से अपेक्षा करेगा, और ऐसा इसलिए है क्योंकि संख्या को चर के रूप में संग्रहीत किया जाता है, आमतौर पर स्क्रीन पर इसे देखने का तरीका नहीं है। इस व्यवहार की व्याख्या करने वाले बहुत सारे उत्तर हैं:
राउंड () ठीक से राउंडिंग नहीं लगता है
इस समस्या से बचने का एक तरीका यह है कि आप इस उत्तर के अनुसार दशमलव का उपयोग करें: https://stackoverflow.com/a/15398691/4345659
इस जवाब के लिए अतिरिक्त पुस्तकालयों का उपयोग किए बिना ठीक से काम करने के लिए यह एक कस्टम गोलाई फ़ंक्शन का उपयोग करना सुविधाजनक होगा। बहुत सारे सुधारों के बाद, मैं निम्नलिखित समाधान के साथ आया, कि जहां तक मैंने परीक्षण किया, सभी भंडारण मुद्दों से बचा रहा। यह स्ट्रिंग प्रतिनिधित्व का उपयोग करने पर आधारित है, repr()( प्राप्त नहीं str()!)। यह हैकिंग लगता है लेकिन यह एकमात्र तरीका था जिससे मैंने सभी मामलों को हल किया। यह Python2 और Python3 दोनों के साथ काम करता है।
def proper_round(num, dec=0):
num = str(num)[:str(num).index('.')+dec+2]
if num[-1]>='5':
return float(num[:-2-(not dec)]+str(int(num[-2-(not dec)])+1))
return float(num[:-1])
टेस्ट:
>>> print(proper_round(1.0005,3))
1.001
>>> print(proper_round(2.0005,3))
2.001
>>> print(proper_round(3.0005,3))
3.001
>>> print(proper_round(4.0005,3))
4.001
>>> print(proper_round(5.0005,3))
5.001
>>> print(proper_round(1.005,2))
1.01
>>> print(proper_round(2.005,2))
2.01
>>> print(proper_round(3.005,2))
3.01
>>> print(proper_round(4.005,2))
4.01
>>> print(proper_round(5.005,2))
5.01
>>> print(proper_round(1.05,1))
1.1
>>> print(proper_round(2.05,1))
2.1
>>> print(proper_round(3.05,1))
3.1
>>> print(proper_round(4.05,1))
4.1
>>> print(proper_round(5.05,1))
5.1
>>> print(proper_round(1.5))
2.0
>>> print(proper_round(2.5))
3.0
>>> print(proper_round(3.5))
4.0
>>> print(proper_round(4.5))
5.0
>>> print(proper_round(5.5))
6.0
>>>
>>> print(proper_round(1.000499999999,3))
1.0
>>> print(proper_round(2.000499999999,3))
2.0
>>> print(proper_round(3.000499999999,3))
3.0
>>> print(proper_round(4.000499999999,3))
4.0
>>> print(proper_round(5.000499999999,3))
5.0
>>> print(proper_round(1.00499999999,2))
1.0
>>> print(proper_round(2.00499999999,2))
2.0
>>> print(proper_round(3.00499999999,2))
3.0
>>> print(proper_round(4.00499999999,2))
4.0
>>> print(proper_round(5.00499999999,2))
5.0
>>> print(proper_round(1.0499999999,1))
1.0
>>> print(proper_round(2.0499999999,1))
2.0
>>> print(proper_round(3.0499999999,1))
3.0
>>> print(proper_round(4.0499999999,1))
4.0
>>> print(proper_round(5.0499999999,1))
5.0
>>> print(proper_round(1.499999999))
1.0
>>> print(proper_round(2.499999999))
2.0
>>> print(proper_round(3.499999999))
3.0
>>> print(proper_round(4.499999999))
4.0
>>> print(proper_round(5.499999999))
5.0
अंत में, सही उत्तर होगा:
# Having proper_round defined as previously stated
h = int(proper_round(h))
संपादित करें 3:
टेस्ट:
>>> proper_round(6.39764125, 2)
6.31 # should be 6.4
>>> proper_round(6.9764125, 1)
6.1 # should be 7
यहाँ गोत्र यह है कि dec-th दशमलव 9 हो सकता है और यदि dec+1-th अंक> = 5 तो 9 एक 0 बन जाएगा और 1 को ले जाना चाहिएdec-1 -th अंक तक ।
यदि हम इसे ध्यान में रखते हैं, तो हम प्राप्त करते हैं:
def proper_round(num, dec=0):
num = str(num)[:str(num).index('.')+dec+2]
if num[-1]>='5':
a = num[:-2-(not dec)] # integer part
b = int(num[-2-(not dec)])+1 # decimal part
return float(a)+b**(-dec+1) if a and b == 10 else float(a+str(b))
return float(num[:-1])
ऊपर वर्णित स्थिति में b = 10और पिछला संस्करण बस समवर्ती होगा aऔर bजिसके परिणामस्वरूप अनुगमन होगा 10जहां अनुगामी 0 गायब हो जाएगा। यह संस्करण एक उचित कैरी के रूप में, bसही दशमलव स्थान पर आधारित है dec।
int(x)