দশমিক পয়েন্টের পরে কীভাবে নম্বর পাবেন?


123

দশমিক পয়েন্টের পরে আমি কীভাবে নম্বরগুলি পাব?

উদাহরণস্বরূপ, আমার কাছে থাকলে আমি 5.55কীভাবে পাব .55?


উত্তর:


29

আপনার জন্য একটি সহজ পদ্ধতির:

number_dec = str(number-int(number))[1:]

30
পাঠকের জন্য অনুশীলন করুন: এটি 10 ​​এর চেয়ে বড় বা সমান সংখ্যার জন্য কাজ করুন
প্ররোচিত

11
number_dec = str(number-int(number)).split('.')[1]
রায়ান অ্যালেন

28
ডাউনভোট কারণ এটি একটি অযথা জটিল পদ্ধতি। আমি যে উত্তরটি চেয়েছি তা হ'ল পরবর্তী উত্তর, 5.55 % 1যা আরও সাধারণভাবে কার্যকর উত্তর - একাধিক ভাষায় মডিউল বিভাগের পদ্ধতির ব্যবহার করতে পারে, তবে উপরের উত্তরটি পাইথন-নির্দিষ্ট।
স্টিউ

3
দ্রষ্টব্য: এই সমাধানটি বিন্দু ( .55) সহ একটি স্ট্রিং প্রদান করে , যা আপনি প্রশ্নের শিরোনামের কারণে আশা করতে পারেন না!
টি। ক্রিশ্চিয়ানসেন

8
str(5.55 - int(5.55))[1:]প্রশ্নে উল্লিখিত .5499999999999998পরিবর্তে ফিরে আসে .55
ক্রিশ্চিয়ান সিউপিতু

198
5.55 % 1

মনে রাখবেন এটি আপনাকে ভাসমান পয়েন্টের বৃত্তাকার সমস্যাগুলির সাথে সহায়তা করবে না। অর্থাৎ আপনি পেতে পারেন:

0.550000000001

বা অন্যথায় আপনি আশা করছেন 0.55 থেকে কিছুটা দূরে।


7
যেমন modfএটি যথার্থতাও স্ক্রু করতে পারে: math.modf(5.55)ফিরে আসবে (0.5499999999999998, 5.0)।
বেরিল

1
দ্রুত অপারেশনটি কী হবে কেউ জানেন কি, উপরে বর্ণিত এই পদ্ধতিটি বা: ফ্লোট বি = এ - ইনট (ক)? আমি পরে সন্দেহ করি, তবে নিশ্চিত হয়ে গেছে কিনা তা দেখতে চেয়েছিলাম
হক্কুক

4
একটি রাস্পবেরি পাইতে এই পদ্ধতিটি পদ্ধতি এবং পদ্ধতির x%1চেয়ে প্রায় দ্বিগুণ দ্রুত ছিল (সময়গুলি 980ns, 1.39us এবং 1.47us গড়ে 1000000 রানের উপরে ছিল)। আমার মানটি সর্বদা ইতিবাচক ছিল তাই আমাকে এটি সম্পর্কে চিন্তা করতে হবে না। x-int(x)modf(x)[0]x
কোডারফরফ্লাথ

অবশ্যই মডিউল অপারেশন দ্রুত। এটি কোনও নাম অনুসন্ধান করতে হবে না। যদিও ইন্ট ফাংশনটি কল করা বৈশ্বিক ভেরিয়েবলগুলির উপর নজর রাখে।
এনরিকো বোরবা

অভিনব শুধু একটি frac না ()
mckenzm

155

মোডেফ ব্যবহার করুন :

>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0

2
ভাল সমাধান, তবে, math.modf(2.53) = (0.5299999999999998, 2.0)প্রত্যাশিত উত্তরটি 0.53
লর্ড লোহ।

4
@LordLoh। এটি ভাসমান পয়েন্ট গোলাকার কারণে, এবং যে কোনও পদ্ধতিতে ঘটবে।
রেনা

@LordLoh। 0.53 পেতে রাউন্ড (0.52999999999999988, 2) ব্যবহার করার চেষ্টা করুন আরেকটি উপায় হ'ল দশমিক প্যাকেজ থেকে দশমিক ব্যবহার করা। docs.python.org/2/library/decimal.html
SirJ

57

কি সম্পর্কে:

a = 1.3927278749291
b = a - int(a)

b
>> 0.39272787492910011

বা, অদ্ভুত ব্যবহার করে:

import numpy
a = 1.3927278749291
b = a - numpy.fix(a)

33

decimalস্ট্যান্ডার্ড লাইব্রেরি থেকে মডিউলটি ব্যবহার করে আপনি আসল নির্ভুলতা ধরে রাখতে পারবেন এবং ভাসমান পয়েন্টের বৃত্তাকার সমস্যাগুলি এড়াতে পারবেন:

>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')

মন্তব্যে কিণ্ডল নোট হিসাবে , আপনাকে floatপ্রথমে নেটিভ গুলি স্ট্রিংয়ে রূপান্তর করতে হবে ।


মূল প্রশ্ন-জিজ্ঞাসকের সুবিধার জন্য: দশমিকের মধ্যে রূপান্তরিত হওয়ার আগে ভাসমানগুলি একটি স্টারে রূপান্তর করতে হবে। সুতরাং আপনার কাছে থাকলে n = 5.55এন একটি ভাসা, এবং Decimal(str(n)) % 1ভগ্নাংশের অংশ পেতে আপনার করা উচিত to (আপনার যদি পূর্ণসংখ্যা থাকে তবে এটি প্রয়োজনীয় নয় তবে এতে কোনও ক্ষতি হয় না))

2
@ প্রত্যাশিত: এটি দশমিক হওয়ার দরকার নেই, এটি ভাসমান ক্ষেত্রেও কাজ করে: 10.0/3 % 1কমপক্ষে আমার সিস্টেমে
এহেরোক

2
আপনি স্ট্রিং ব্যবহার না করে from_float ব্যবহার করতে পারেন। d = দশমিক.ফ্রম_ফ্লোয়েট (1.2)
ম্যাথু পারডন

@intuited কিভাবে একটি পূর্ণসংখ্যার হিসাবে দশমিক অংশ গ্রহণ করতে পারে? আমি চেষ্টা করেছি_ইন্টার () পদ্ধতিগুলি কিন্তু ধরণটি এখনও দশমিক।
D1X

1
@ ম্যাথিউপর্ডন - আপনি যদি ব্যবহার করেন Decimal.from_float(1.2)(যা এখন হিসাবে লেখা যেতে পারে Decimal(1.2)) আপনার কাছে গোলাকার সমস্যা রয়েছে, যা এই উত্তরটি এড়াতে চাইছিল।
জন ওয়াই


5

গৃহীত উত্তরের অনুরূপ, স্ট্রিংগুলি ব্যবহার করে আরও সহজ পন্থা হবে

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-
মার্ক ডিকিনসন


4
>>> n=5.55
>>> if "." in str(n):
...     print "."+str(n).split(".")[-1]
...
.55

2
বাগানের বিভিন্ন সংখ্যার জন্য এটি ঠিক আছে তবে বৃহত সংখ্যক (বা ছোট) বৈজ্ঞানিক স্বরলিপি প্রয়োজনের জন্য এত ভাল কাজ করে না।
প্রস্থান করুন

2

এটি এমন একটি সমাধান যা আমি চেষ্টা করেছি:

num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))

2

কখনও কখনও পিছনে জিরো ব্যাপার

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)

এটি 0.000005 এর জন্য কী করে?
আদিত্য পাটনায়েক জুনে

1

মূল সংখ্যা থেকে মেঝে ব্যবহার করুন এবং ফলাফলটি বিয়োগ করুন:

>> 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

5
আপনি যদি যাচ্ছেন import math, কেন শুধু ব্যবহার math.modf()করবেন না ?
ire_and_curses

@ire_and_curses: আমি সমস্যার বিকল্প সমাধান সরবরাহ করছি।

1
মেঝে কোনও ইন্টিতে কাস্টিংয়ের মতোই কাজ করে তাই ম্যাথ.ফ্লুর (টি) কে ইনট (টি) দিয়ে প্রতিস্থাপন করতে পারে
কোয়ান্টামকার্ল ২

@ কোয়ান্টামকার্ল না, তারা আলাদা। math.floor(-1.1) == -2কিন্তু int(-1.1) == -1। যদিও এই প্রশ্নের জন্য ব্যবহার intকরা আরও সঠিক।
লাম্বদা পরী

1

দশমিক (বেস 10) ফর্ম্যাটে ফ্লোট নম্বর সংরক্ষণ করা হয় না। নিজেকে কেন সন্তুষ্ট করতে এ বিষয়ে অজগর ডকুমেন্টেশনের মাধ্যমে পড়ুন । অতএব, একটি ভাসা থেকে একটি বেস 10 প্রতিনিধিত্ব পেতে পরামর্শ দেওয়া হয় না।

এখন এমন সরঞ্জাম রয়েছে যা দশমিক ফর্ম্যাটে সংখ্যাসূচক তথ্য সংরক্ষণের অনুমতি দেয়। নীচে Decimalলাইব্রেরি ব্যবহার করে একটি উদাহরণ দেওয়া হল ।

from decimal import *

x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66'  # True

y = 0.341343214124443151466
str(y)[-2:] == '66'  # False

1

উদাহরণ:

import math
x = 5.55
print((math.floor(x*100)%100))

এটি আপনাকে দশমিক পয়েন্টের পরে দুটি সংখ্যা দেবে, উদাহরণ থেকে 55। আপনার যদি একটি নম্বর প্রয়োজন হয় তবে আপনি উপরের গণনাগুলিকে 10 দ্বারা হ্রাস করতে পারবেন বা দশমিকের পরে আপনি কতগুলি সংখ্যা চান তার উপর নির্ভর করে বৃদ্ধি করুন।


এটি দুর্দান্ত কারণ এটি একটি অ-ভগ্নাংশের মানটি ফিরিয়ে দেয় তবে নেতিবাচক সংখ্যায় ভেঙে যায়
মায়ো

দুর্ভাগ্যক্রমে এটি বেশিরভাগ সময় কার্যকর হয় না। @ মিউ
মারকুইস


1

কেবল সাধারণ অপারেটর বিভাগ '/' এবং ফ্লোর বিভাগ '//' ব্যবহার করে আপনি সহজেই যে কোনও ফ্লোটের ভগ্নাংশের অংশটি পেতে পারেন।

number = 5.55

result = (number/1) - (number//1)

print(result)

0

কি সম্পর্কে:

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 বিয়োগ করতে পারি এবং দশমিক পয়েন্টগুলির পছন্দসই সংখ্যাটি বের করতে পারি। এটি বেশিরভাগ সময় কাজ করা উচিত, যদি না আপনার প্রচুর দশমিক স্থান থাকে এবং রাউন্ডিংয়ের ত্রুটিটি যখন রাউন্ডের দ্বিতীয় প্যারামিটারে হস্তক্ষেপ করে।


কোন ব্যাখ্যা?



0

অজগর 3 এর দশমিক পয়েন্টের পরে সংখ্যাগুলি পেতে আমি কী করি তা দেখুন:

a=1.22
dec=str(a).split('.')
dec= int(dec[1])

0

আপনি যদি পান্ডা ব্যবহার করেন:

df['decimals'] = df['original_number'].mod(1)

0

অন্য বিকল্পটি 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 এর ডানদিকে ডান প্যানেলে ব্যাখ্যা করা হয়েছে । আপনি যদি চান, আপনি এই লিঙ্কটিতেও দেখতে পারেন , কীভাবে এটি কিছু নমুনার ইনপুটগুলির সাথে মেলে।


উৎস

অজগর বিয়োগে অতিরিক্ত ভাসমান সংখ্যা থেকে কীভাবে মুক্তি পাবেন?


0

আমি খুঁজে পেয়েছি যে ভগ্নাংশটি পাওয়ার জন্য মডুলো 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')

0

মোডেফ ব্যবহার করে অন্য একটি উদাহরণ

from math import modf
number = 1.0124584

# [0] decimal, [1] integer
result = modf(number)
print(result[0])
# output = 0124584
print(result[1])
# output = 1

0

একটি সমাধান হল মডুলো এবং বৃত্তাকার ব্যবহার।

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



-2

আর একটি উন্মাদ সমাধান হ'ল (স্ট্রিংয়ে রূপান্তর না করে):

number = 123.456
temp = 1

while (number*temp)%10 != 0:
    temp = temp *10
    print temp
    print number

temp = temp /10
number = number*temp
number_final = number%temp
print number_final
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.