splitting a number into the integer and decimal parts

Posted on

Question :

splitting a number into the integer and decimal parts

Is there a pythonic way of splitting a number such as 1234.5678 into two parts (1234, 0.5678) i.e. the integer part and the decimal part?

Answer #1:

Use math.modf:

import math
x = 1234.5678
math.modf(x) # (0.5678000000000338, 1234.0)
Answered By: mhyfritz

Answer #2:

We can use a not famous built-in function; divmod:

>>> s = 1234.5678
>>> i, d = divmod(s, 1)
>>> i
1234.0
>>> d
0.5678000000000338
Answered By: utdemir

Answer #3:

>>> a = 147.234
>>> a % 1
0.23400000000000887
>>> a // 1
147.0
>>>

If you want the integer part as an integer and not a float, use int(a//1) instead. To obtain the tuple in a single passage: (int(a//1), a%1)

EDIT: Remember that the decimal part of a float number is approximate, so if you want to represent it as a human would do, you need to use the decimal library

Answered By: mac

Answer #4:

intpart,decimalpart = int(value),value-int(value)

Works for positive numbers.

Answered By: Mark Ransom

Answer #5:

This variant allows getting desired precision:

>>> a = 1234.5678
>>> (lambda x, y: (int(x), int(x*y) % y/y))(a, 1e0)
(1234, 0.0)
>>> (lambda x, y: (int(x), int(x*y) % y/y))(a, 1e1)
(1234, 0.5)
>>> (lambda x, y: (int(x), int(x*y) % y/y))(a, 1e15)
(1234, 0.5678)
Answered By: dann

Answer #6:

This also works for me

>>> val_int = int(a)
>>> val_fract = a - val_int
Answered By: Shameem

Answer #7:

This is the way I do it:

num = 123.456
split_num = str(num).split('.')
int_part = int(split_num[0])
decimal_part = int(split_num[1])
Answered By: holydrinker

Answer #8:

If you don’t mind using NumPy, then:

In [319]: real = np.array([1234.5678])

In [327]: integ, deci = int(np.floor(real)), np.asscalar(real % 1)

In [328]: integ, deci
Out[328]: (1234, 0.5678000000000338)
Answered By: kmario23

Leave a Reply

Your email address will not be published. Required fields are marked *