[pyar] Convirtiendo str a Decimal con separador decimal coma

Fabian Ezequiel Gallina galli.87 en gmail.com
Mar Feb 1 12:22:07 ART 2011


El día 1 de febrero de 2011 11:40, Maximiliano Robaina
<maxi_robaina en yahoo.com.ar> escribió:
> Hola,
>
> Tengo un string que representa un valor decimal cuyo separador decimal
> es el caracter coma (,)
> Entonces, cuando lo quiero convertir a Decimal, me da error. Por ejemplo
> si el string es '39,5' -> Decimal('39,5') tira la siguiente excepción
>
>>> Invalid literal for Decimal: u'39,5'
>
> La pregunta es ¿Cuál es la mejor manera de tartar esto?
> La solución "rápida" sería reemplazar la coma por el punto, pero.. ¿Es
> la mejor solución o debería tener alguna otra cosa en cuenta?
>

La "mejor manera de solucionar esto" depende de:

Si se debería aceptar valores decimales con "."? (ex: 39.5)
El dato a convertir a Decimal puede tener separadores de miles cuando
viene? (ex: 123.456.789,50)

ponele que el tipo puede tener separadores de miles:

DECIMAL_POINT = ","
THOUSANDS_SEP = "."

entero, decimal = data.split(DECIMAL_POINT)
entero = entero.replace(THOUSANDS_SEP, "")
".".join([entero, decimal])

Ponele que podés sacar el locale del chabón que ingresa los datos como
para tener mejor qué separador decimal y de miles puede usar:

import locale

try:
    locale.setlocale(locale.LC_ALL, get_user_locale())
except locale.Error:
    locale.setlocale(locale.LC_ALL, '')

locale_data = locale.localeconv()

DECIMAL_POINT = locale_data['decimal_point']
THOUSANDS_SEP = locale_data['thousands_sep']

entero, decimal = data.split(DECIMAL_POINT)
entero = entero.replace(THOUSANDS_SEP, "")
".".join([entero, decimal])


Saludos,
-- 
Fabián E. Gallina
http://www.from-the-cloud.com



More information about the pyar mailing list