দশমিক পয়েন্টের পরে আমি কীভাবে নম্বরগুলি পাব?
উদাহরণস্বরূপ, আমার কাছে থাকলে আমি 5.55
কীভাবে পাব .55
?
দশমিক পয়েন্টের পরে আমি কীভাবে নম্বরগুলি পাব?
উদাহরণস্বরূপ, আমার কাছে থাকলে আমি 5.55
কীভাবে পাব .55
?
উত্তর:
আপনার জন্য একটি সহজ পদ্ধতির:
number_dec = str(number-int(number))[1:]
number_dec = str(number-int(number)).split('.')[1]
5.55 % 1
যা আরও সাধারণভাবে কার্যকর উত্তর - একাধিক ভাষায় মডিউল বিভাগের পদ্ধতির ব্যবহার করতে পারে, তবে উপরের উত্তরটি পাইথন-নির্দিষ্ট।
.55
) সহ একটি স্ট্রিং প্রদান করে , যা আপনি প্রশ্নের শিরোনামের কারণে আশা করতে পারেন না!
str(5.55 - int(5.55))[1:]
প্রশ্নে উল্লিখিত .5499999999999998
পরিবর্তে ফিরে আসে .55
।
5.55 % 1
মনে রাখবেন এটি আপনাকে ভাসমান পয়েন্টের বৃত্তাকার সমস্যাগুলির সাথে সহায়তা করবে না। অর্থাৎ আপনি পেতে পারেন:
0.550000000001
বা অন্যথায় আপনি আশা করছেন 0.55 থেকে কিছুটা দূরে।
modf
এটি যথার্থতাও স্ক্রু করতে পারে: math.modf(5.55)
ফিরে আসবে (0.5499999999999998, 5.0)।
x%1
চেয়ে প্রায় দ্বিগুণ দ্রুত ছিল (সময়গুলি 980ns, 1.39us এবং 1.47us গড়ে 1000000 রানের উপরে ছিল)। আমার মানটি সর্বদা ইতিবাচক ছিল তাই আমাকে এটি সম্পর্কে চিন্তা করতে হবে না। x-int(x)
modf(x)[0]
x
মোডেফ ব্যবহার করুন :
>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0
math.modf(2.53) = (0.5299999999999998, 2.0)
প্রত্যাশিত উত্তরটি 0.53
কি সম্পর্কে:
a = 1.3927278749291
b = a - int(a)
b
>> 0.39272787492910011
বা, অদ্ভুত ব্যবহার করে:
import numpy
a = 1.3927278749291
b = a - numpy.fix(a)
decimal
স্ট্যান্ডার্ড লাইব্রেরি থেকে মডিউলটি ব্যবহার করে আপনি আসল নির্ভুলতা ধরে রাখতে পারবেন এবং ভাসমান পয়েন্টের বৃত্তাকার সমস্যাগুলি এড়াতে পারবেন:
>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')
মন্তব্যে কিণ্ডল নোট হিসাবে , আপনাকে float
প্রথমে নেটিভ গুলি স্ট্রিংয়ে রূপান্তর করতে হবে ।
n = 5.55
এন একটি ভাসা, এবং Decimal(str(n)) % 1
ভগ্নাংশের অংশ পেতে আপনার করা উচিত to (আপনার যদি পূর্ণসংখ্যা থাকে তবে এটি প্রয়োজনীয় নয় তবে এতে কোনও ক্ষতি হয় না))
10.0/3 % 1
কমপক্ষে আমার সিস্টেমে
Decimal.from_float(1.2)
(যা এখন হিসাবে লেখা যেতে পারে Decimal(1.2)
) আপনার কাছে গোলাকার সমস্যা রয়েছে, যা এই উত্তরটি এড়াতে চাইছিল।
মডুলো চেষ্টা করুন:
5.55%1 = 0.54999999999999982
গৃহীত উত্তরের অনুরূপ, স্ট্রিংগুলি ব্যবহার করে আরও সহজ পন্থা হবে
def number_after_decimal(number1):
number = str(number1)
if 'e-' in number: # scientific notation
number_dec = format(float(number), '.%df'%(len(number.split(".")[1].split("e-")[0])+int(number.split('e-')[1])))
elif "." in number: # quick check if it is decimal
number_dec = number.split(".")[1]
return number_dec
number = 5.55; "." in number
দেয় TypeError: argument of type 'float' is not iterable
। এবং আপনি কি করবেন number = 1e-5
?
float
; পাইথন সম্বন্ধে কি ধরনের ফর্ম্যাটে এটা মূলত প্রকাশ করা হয়েছিল কোন জ্ঞান পালন না করে আমার। number = 1e-5
উদাহরণস্বরূপ জন্যও একইভাবে প্রযোজ্য number = 0.00001
: str
সংখ্যা প্রতিনিধিত্ব বৈজ্ঞানিক স্বরলিপি হয়। আপনি e+
পাশাপাশি মোকাবেলা করতে চাইবেন e-
।
import math
orig = 5.55
whole = math.floor(orig) # whole = 5.0
frac = orig - whole # frac = 0.55
>>> n=5.55
>>> if "." in str(n):
... print "."+str(n).split(".")[-1]
...
.55
কখনও কখনও পিছনে জিরো ব্যাপার
In [4]: def split_float(x):
...: '''split float into parts before and after the decimal'''
...: before, after = str(x).split('.')
...: return int(before), (int(after)*10 if len(after)==1 else int(after))
...:
...:
In [5]: split_float(105.10)
Out[5]: (105, 10)
In [6]: split_float(105.01)
Out[6]: (105, 1)
In [7]: split_float(105.12)
Out[7]: (105, 12)
মূল সংখ্যা থেকে মেঝে ব্যবহার করুন এবং ফলাফলটি বিয়োগ করুন:
>> import math #gives you floor.
>> t = 5.55 #Give a variable 5.55
>> x = math.floor(t) #floor returns t rounded down to 5..
>> z = t - x #z = 5.55 - 5 = 0.55
import math
, কেন শুধু ব্যবহার math.modf()
করবেন না ?
math.floor(-1.1) == -2
কিন্তু int(-1.1) == -1
। যদিও এই প্রশ্নের জন্য ব্যবহার int
করা আরও সঠিক।
দশমিক (বেস 10) ফর্ম্যাটে ফ্লোট নম্বর সংরক্ষণ করা হয় না। নিজেকে কেন সন্তুষ্ট করতে এ বিষয়ে অজগর ডকুমেন্টেশনের মাধ্যমে পড়ুন । অতএব, একটি ভাসা থেকে একটি বেস 10 প্রতিনিধিত্ব পেতে পরামর্শ দেওয়া হয় না।
এখন এমন সরঞ্জাম রয়েছে যা দশমিক ফর্ম্যাটে সংখ্যাসূচক তথ্য সংরক্ষণের অনুমতি দেয়। নীচে Decimal
লাইব্রেরি ব্যবহার করে একটি উদাহরণ দেওয়া হল ।
from decimal import *
x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66' # True
y = 0.341343214124443151466
str(y)[-2:] == '66' # False
উদাহরণ:
import math
x = 5.55
print((math.floor(x*100)%100))
এটি আপনাকে দশমিক পয়েন্টের পরে দুটি সংখ্যা দেবে, উদাহরণ থেকে 55। আপনার যদি একটি নম্বর প্রয়োজন হয় তবে আপনি উপরের গণনাগুলিকে 10 দ্বারা হ্রাস করতে পারবেন বা দশমিকের পরে আপনি কতগুলি সংখ্যা চান তার উপর নির্ভর করে বৃদ্ধি করুন।
import math
x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )
এটা অবশ্যই কাজ করেছে
কি সম্পর্কে:
a = 1.234
b = a - int(a)
length = len(str(a))
round(b, length-2)
আউটপুট:
print(b)
0.23399999999999999
round(b, length-2)
0.234
যেহেতু গোলটি দশমিকের ('0.234') এর দৈর্ঘ্যে প্রেরণ করা হয়, তাই আমরা '0.' গণনা না করে 2 বিয়োগ করতে পারি এবং দশমিক পয়েন্টগুলির পছন্দসই সংখ্যাটি বের করতে পারি। এটি বেশিরভাগ সময় কাজ করা উচিত, যদি না আপনার প্রচুর দশমিক স্থান থাকে এবং রাউন্ডিংয়ের ত্রুটিটি যখন রাউন্ডের দ্বিতীয় প্যারামিটারে হস্তক্ষেপ করে।
আপনি এটি চেষ্টা করতে পারেন:
your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])
এটি ফিরে আসবে 0.55
।
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)
আউটপুট: 0.55
অন্য বিকল্পটি re
মডিউলটির সাথে re.findall
বা এটি ব্যবহার করে re.search
:
import re
def get_decimcal(n: float) -> float:
return float(re.search(r'\.\d+', str(n)).group(0))
def get_decimcal_2(n: float) -> float:
return float(re.findall(r'\.\d+', str(n))[0])
def get_int(n: float) -> int:
return int(n)
print(get_decimcal(5.55))
print(get_decimcal_2(5.55))
print(get_int(5.55))
0.55
0.55
5
আপনি যদি ভাবটি সরল / সংশোধন / অন্বেষণ করতে চান তবে এটি regex101.com এর ডানদিকে ডান প্যানেলে ব্যাখ্যা করা হয়েছে । আপনি যদি চান, আপনি এই লিঙ্কটিতেও দেখতে পারেন , কীভাবে এটি কিছু নমুনার ইনপুটগুলির সাথে মেলে।
অজগর বিয়োগে অতিরিক্ত ভাসমান সংখ্যা থেকে কীভাবে মুক্তি পাবেন?
আমি খুঁজে পেয়েছি যে ভগ্নাংশটি পাওয়ার জন্য মডুলো 1 ব্যবহার করার সময় সত্যিকারের বৃহত ভগ্নাংশের অংশ সহ সত্যিই বড় সংখ্যক সমস্যা সৃষ্টি করতে পারে।
import decimal
>>> d = decimal.Context(decimal.MAX_PREC).create_decimal(
... '143000000000000000000000000000000000000000000000000000000000000000000000000000.1231200000000000000002013210000000'
... )
...
>>> d % 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
পরিবর্তে আমি অবিচ্ছেদ্য অংশটি ধরলাম এবং এর বাকি অংশটি সহজীকরণে সহায়তা করার জন্য এটি প্রথমে বিয়োগ করেছি।
>>> d - d.to_integral()
Decimal('0.1231200000000000000002013210')
মোডেফ ব্যবহার করে অন্য একটি উদাহরণ
from math import modf
number = 1.0124584
# [0] decimal, [1] integer
result = modf(number)
print(result[0])
# output = 0124584
print(result[1])
# output = 1
একটি সমাধান হল মডুলো এবং বৃত্তাকার ব্যবহার।
import math
num = math.fabs(float(5.55))
rem = num % 1
rnd_by = len(str(num)) - len(str(int(num))) - 1
print(str(round(rem,rnd_by)))
আপনার আউটপুট হবে 0.55
আপনি এটি ব্যবহার করতে পারেন:
number = 5.55
int(str(number).split('.')[1])