বাইনারি ফ্লোটের অভ্যন্তরীণ প্রতিনিধিত্বের কারণে কিছু দশমিক সংখ্যা বাইনারি ফ্লোট হিসাবে স্পষ্টভাবে উপস্থাপন করা যায় না। উদাহরণস্বরূপ: 14.225 থেকে দুটি দশমিক অঙ্কের বৃত্তাকার ফলে 14.23 এর ফলস্বরূপ ফল পাওয়া যায় না তবে কেউ 14.22 এ প্রত্যাশা করতে পারে।
পাইথন :
In: round(14.225, 2)
Out: 14.22
তবে ধরে নিন, আমাদের '14 .225 'হিসাবে 14.225 এর একটি স্ট্রিং প্রতিনিধিত্ব রয়েছে, আমাদের স্ট্রিং প্রতিনিধিত্ব হিসাবে আমাদের পছন্দসই বৃত্তাকার '14 .23' অর্জন করতে সক্ষম হওয়া উচিত।
এই পদ্ধতির সুনির্দিষ্ট নির্ভুলতায় সাধারণীকরণ করা যায়।
সম্ভাব্য পাইথন 2/3 সমাধান
import sys
def round_string(string, precision):
assert(int(precision) >= 0)
float(string)
decimal_point = string.find('.')
if decimal_point == -1:
if precision == 0:
return string
return string + '.' + '0' * precision
all_decimals = string[decimal_point+1:]
nb_missing_decimals = precision - len(all_decimals)
if nb_missing_decimals >= 0:
if precision == 0:
return string[:decimal_point]
return string + '0' * nb_missing_decimals
if int(all_decimals[precision]) < 5:
if precision == 0:
return string[:decimal_point]
return string[:decimal_point+precision+1]
sign = '-' if string[0] == '-' else ''
integer_part = abs(int(string[:decimal_point]))
if precision == 0:
return sign + str(integer_part + 1)
decimals = str(int(all_decimals[:precision]) + 1)
nb_missing_decimals = precision - len(decimals)
if nb_missing_decimals >= 0:
return sign + str(integer_part) + '.' + '0' * nb_missing_decimals + decimals
return sign + str(integer_part + 1) + '.' + '0' * precision
ব্যবহার :
# No IEEE 754 format rounding
In: round_string('14.225',2)
Out: '14.23'
# Trailing zeros
In: round_string('123.4',5)
Out: '123.40000'
In: round_string('99.9',0)
Out: '100'
# Negative values
In: round_string('-99.9',0)
Out: '-100'
In: round_string('1',0)
Out: '1'
# No unnecessary decimal point
In: round_string('1.',0)
Out: '1'
# No unnecessary decimal point
In: round_string('1.0',0)
Out: '1'
In: for i in range(8):
print(round_string('123456789.987654321',i))
Out: 123456790
123456790.0
123456789.99
123456789.988
123456789.9877
123456789.98765
123456789.987654
123456789.9876543
কার্য
ইনপুট আর্গুমেন্ট 1 : একটি স্ট্রিং রয়েছে
- অঙ্ক এক অন্তত (
0
,1
,2
,3
,4
,5
,6
,7
,8
,9
), - সর্বাধিক এক দশমিক বিন্দু (
.
) যা কমপক্ষে একটি অঙ্কের আগে হওয়া উচিত, -
প্রথম অক্ষর হিসাবে একটি alচ্ছিক বিয়োগ ( )।
ইনপুট আর্গুমেন্ট 2 : একটি অ-নেতিবাচক পূর্ণসংখ্যা
আউটপুট : সঠিকভাবে বৃত্তাকার (বেস 10) স্ট্রিং
গোলাকার = শূন্য থেকে অর্ধেক দূরে
এটি একটি কোড-গল্ফ । সর্বনিম্ন বাইট জিতেছে!
round(A,B
5 বাইট
0
একটি ধনাত্মক পূর্ণসংখ্যা নয়, এটি "অ-নেতিবাচক"।
123.4 & 5 --> 123.40000
? বা আমরা কি ধরে নিতে পারি যে দ্বিতীয় ইনপুটটি প্রথম ইনপুটটিতে পয়েন্টের পরে দশমিকের পরিমাণের চেয়ে বড় কখনও হবে না?