dividir un número en las partes enteras y decimales

¿Hay una forma pythonica de dividir un número como 1234.5678 en dos partes (1234, 0.5678) es decir, la parte entera y la parte decimal?

Utilice math.modf :

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

Podemos usar una función incorporada no famosa; divmod

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

Si desea que la parte entera sea un entero y no un flotante, use int(a//1) lugar. Para obtener la tupla en un solo pasaje: (int(a//1), a%1)

EDITAR: recuerde que la parte decimal de un número flotante es aproximada , por lo que si desea representarlo como lo haría un humano, debe usar la biblioteca decimal

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

Funciona para números positivos.

Esta variante permite obtener la precisión deseada:

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

Esto tambien funciona para mi

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

Así es como lo hago:

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

Si no te importa usar NumPy, entonces:

 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)