दशमलव बिंदु के बाद मुझे नंबर कैसे मिलते हैं?
उदाहरण के लिए, अगर मेरे पास है 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
लगभग दोगुनी थी (विधियों x-int(x)
और modf(x)[0]
समय 980 980, 1.39us, और 1.47us 1000000 से अधिक रन थे)। मेरा मूल्य x
हमेशा सकारात्मक था इसलिए मुझे इस बारे में चिंता करने की आवश्यकता नहीं थी।
Modf का प्रयोग करें :
>>> 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
या, numpy का उपयोग करना:
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
, n एक फ्लोट है, और आपको Decimal(str(n)) % 1
आंशिक भाग प्राप्त करने के लिए करना चाहिए । (यदि आपके पास पूर्णांक है, लेकिन यह आवश्यक नहीं है, तो यह आवश्यक नहीं है।)
10.0/3 % 1
कम से कम मेरे सिस्टम पर
Decimal.from_float(1.2)
(जो अब के रूप में लिखा जा सकता है Decimal(1.2)
) आपके पास गोल मुद्दे होंगे, जिससे यह उत्तर बचने की कोशिश कर रहा था।
स्वीकृत उत्तर के समान, स्ट्रिंग्स के उपयोग से भी आसान तरीका होगा
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 उस उदाहरण से। यदि आपको एक संख्या की आवश्यकता है, तो आप उपरोक्त गणनाओं को १० तक कम कर सकते हैं या इस आधार पर बढ़ा सकते हैं कि आप दशमलव के बाद कितने नंबर चाहते हैं।
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') की लंबाई तक भेजा जाता है, हम 'शून्य' की गणना नहीं करने के लिए केवल 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')
Modf का उपयोग कर एक और उदाहरण
from math import modf
number = 1.0124584
# [0] decimal, [1] integer
result = modf(number)
print(result[0])
# output = 0124584
print(result[1])
# output = 1
एक समाधान modulo और गोलाई का उपयोग कर रहा है।
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])