How do I get the numbers after a decimal point?
For example, if I have 5.55, how do i get .55?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
5.55 % 1
Keep in mind this won’t help you with floating point rounding problems. I.e., you may get:
0.550000000001
Or otherwise a little off the 0.55 you are expecting.
Method 2
Use modf:
>>> import math >>> frac, whole = math.modf(2.5) >>> frac 0.5 >>> whole 2.0
Method 3
What about:
a = 1.3927278749291 b = a - int(a) b >> 0.39272787492910011
Or, using numpy:
import numpy a = 1.3927278749291 b = a - numpy.fix(a)
Method 4
Using the decimal module from the standard library, you can retain the original precision and avoid floating point rounding issues:
>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')
As kindall notes in the comments, you’ll have to convert native floats to strings first.
Method 5
An easy approach for you:
number_dec = str(number-int(number))[1:]
Method 6
Try Modulo:
5.55%1 = 0.54999999999999982
Method 7
To make it work with both positive and negative numbers:
try abs(x)%1. For negative numbers, without with abs, it will go wrong.
5.55 % 1
output 0.5499999999999998
-5.55 % 1
output 0.4500000000000002
Method 8
import math orig = 5.55 whole = math.floor(orig) # whole = 5.0 frac = orig - whole # frac = 0.55
Method 9
similar to the accepted answer, even easier approach using strings would be
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
Method 10
>>> n=5.55
>>> if "." in str(n):
... print "."+str(n).split(".")[-1]
...
.55
Method 11
Just using simple operator division ‘/’ and floor division ‘//’ you can easily get the fraction part of any given float.
number = 5.55 result = (number/1) - (number//1) print(result)
Method 12
Sometimes trailing zeros matter
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)
Method 13
Another example using 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
Method 14
This is a solution I tried:
num = 45.7234 (whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
Method 15
Float numbers are not stored in decimal (base10) format. Have a read through the python documentation on this to satisfy yourself why. Therefore, to get a base10 representation from a float is not advisable.
Now there are tools which allow storage of numeric data in decimal format. Below is an example using the Decimal library.
from decimal import *
x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66' # True
y = 0.341343214124443151466
str(y)[-2:] == '66' # False
Method 16
Use floor and subtract the result from the original number:
>> 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
Method 17
Example:
import math x = 5.55 print((math.floor(x*100)%100))
This is will give you two numbers after the decimal point, 55 from that example. If you need one number you reduce by 10 the above calculations or increase depending on how many numbers you want after the decimal.
Method 18
import math x = 1245342664.6 print( (math.floor(x*1000)%1000) //100 )
It definitely worked
Method 19
I’ve found that really large numbers with really large fractional parts can cause problems when using modulo 1 to get the fraction.
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'>]
I instead grabbed the integral part and subtracted it first to help simplify the rest of it.
>>> d - d.to_integral()
Decimal('0.1231200000000000000002013210')
Method 20
You can use this:
number = 5.55
int(str(number).split('.')[1])
Method 21
This is only if you want toget the first decimal
print(int(float(input()) * 10) % 10)
Or you can try this
num = float(input()) b = num - int(num) c = b * 10 print(int(c))
Method 22
Using math module
speed of this has to be tested
from math import floor
def get_decimal(number):
'''returns number - floor of number'''
return number-floor(number)
Example:
n = 765.126357123 get_decimal(n)
0.12635712300004798
Method 23
def fractional_part(numerator, denominator):
# Operate with numerator and denominator to
# keep just the fractional part of the quotient
if denominator == 0:
return 0
else:
return (numerator/ denominator)-(numerator // denominator)
print(fractional_part(5, 5)) # Should be 0
print(fractional_part(5, 4)) # Should be 0.25
print(fractional_part(5, 3)) # Should be 0.66...
print(fractional_part(5, 2)) # Should be 0.5
print(fractional_part(5, 0)) # Should be 0
print(fractional_part(0, 5)) # Should be 0
Method 24
Easier if the input is a string, we can use split()
decimal = input("Input decimal number: ") #123.456
# split 123.456 by dot = ['123', '456']
after_coma = decimal.split('.')[1]
# because only index 1 is taken then '456'
print(after_coma) # '456'
if you want to make a number type
print(int(after_coma)) # 456
Method 25
a = 12.587
b = float(‘0.’ + str(a).split(‘.’)[-1])
Method 26
What about:
a = 1.234 b = a - int(a) length = len(str(a)) round(b, length-2)
Output:
print(b)
0.23399999999999999
round(b, length-2)
0.234
Since the round is sent to a the length of the string of decimals (‘0.234’), we can just minus 2 to not count the ‘0.’, and figure out the desired number of decimal points. This should work most times, unless you have lots of decimal places and the rounding error when calculating b interferes with the second parameter of round.
Method 27
You may want to try this:
your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])
It will return 0.55.
Method 28
number=5.55 decimal=(number-int(number)) decimal_1=round(decimal,2) print(decimal) print(decimal_1)
output: 0.55
Method 29
See what I often do to obtain numbers after the decimal point in python
3:
a=1.22
dec=str(a).split('.')
dec= int(dec[1])
Method 30
If you are using pandas:
df['decimals'] = df['original_number'].mod(1)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0