[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