web-dev-qa-db-fra.com

diviser un nombre en parties entières et décimales

Existe-t-il une méthode pythonique pour diviser un nombre tel que 1234.5678 en deux parties (1234, 0.5678) c’est-à-dire la partie entière et la partie décimale?

71
Double AA

Utilisation math.modf :

import math
x = 1234.5678
math.modf(x) # (0.5678000000000338, 1234.0)
116
mhyfritz

Nous pouvons utiliser une fonction intégrée non célèbre; divmod:

>>> s = 1234.5678
>>> i, d = divmod(s, 1)
>>> i
1234.0
>>> d
0.5678000000000338
53
utdemir
>>> a = 147.234
>>> a % 1
0.23400000000000887
>>> a // 1
147.0
>>>

Si vous voulez que la partie entière soit un entier et non un float, utilisez plutôt int(a//1). Pour obtenir le tuple en un seul passage: (int(a//1), a%1)

EDIT: N'oubliez pas que la partie décimale d'un nombre à virgule est approximative , donc si vous voulez le représenter comme le ferait un humain, vous devez utiliser le bibliothèque décimale

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

Fonctionne pour les nombres positifs.

13
Mark Ransom

Cette variante permet d'obtenir la précision souhaitée:

>>> 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)
6
dann

Cela fonctionne aussi pour moi

>>> val_int = int(a)
>>> val_fract = a - val_int
3
Shameem

C'est comme ça que je le fais:

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

Si cela ne vous dérange pas d'utiliser NumPy, alors:

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)
1
kmario23