int(round(x))
এটি গোল করে এটি পূর্ণসংখ্যায় পরিবর্তন করবে
সম্পাদনা করুন:
আপনি কোনও ভেরিয়েবলের জন্য int (বৃত্তাকার (h)) বরাদ্দ দিচ্ছেন না। আপনি যখন ইনট (বৃত্তাকার (এইচ)) কল করেন, এটি পূর্ণসংখ্যার নম্বরটি দেয় কিন্তু অন্য কিছুই করে না; আপনাকে এই লাইনটি পরিবর্তন করতে হবে:
h = int(round(h))
H- তে নতুন মান নির্ধারণ করতে
সম্পাদনা 2:
@ প্লোম্যান মন্তব্যে যেমন বলেছিলেন, পাইথনের round()কাজটি সাধারণভাবে প্রত্যাশা মতো কাজ করে না, এবং এটি কারণ যে সংখ্যাটি ভেরিয়েবল হিসাবে সংরক্ষণ করা হয় তা সাধারণত আপনি পর্দায় দেখেননি। এমন অনেক উত্তর রয়েছে যা এই আচরণটি ব্যাখ্যা করে:
গোল () সঠিকভাবে গোল হয় না বলে মনে হচ্ছে
এই সমস্যাটি এড়ানোর এক উপায় হ'ল এই উত্তর দ্বারা বর্ণিত দশমিকটি ব্যবহার করা: https://stackoverflow.com/a/15398691/4345659
অতিরিক্ত লাইব্রেরি ব্যবহার না করে এই উত্তরটি সঠিকভাবে কাজ করার জন্য কাস্টম রাউন্ডিং ফাংশনটি ব্যবহার করা সুবিধাজনক হবে। অনেক সংশোধন করার পরে, আমি নিম্নলিখিত সমাধানটি নিয়ে এসেছি, আমি যতদূর পরীক্ষা করেছি সমস্ত স্টোরিংয়ের সমস্যা এড়িয়ে চলেছি। এটি স্ট্রিং উপস্থাপনা ব্যবহারের উপর ভিত্তি করে প্রাপ্ত repr()(নয় str()!) দিয়ে প্রাপ্ত । এটি হ্যাকি লাগছে তবে সমস্ত কেস সমাধান করার জন্য এটিই একমাত্র উপায়। এটি পাইথন 2 এবং পাইথন 3 উভয়ের সাথে কাজ করে।
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দশম দশমিক 9 হতে পারে এবং dec+1চতুর্থ সংখ্যা> = 5 হলে 9টি 0 হয়ে যায় এবং 1 টি- dec-1তম সংখ্যায় নিয়ে যাওয়া উচিত ।
আমরা যদি এটি বিবেচনায় নিই তবে আমরা পাই:
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)