Tipo de dato Money

Batista, Facundo FBatista en uniFON.com.ar
Jue Oct 16 22:59:09 CEST 2003


#- >Este código es de dominio público. En los módulos, asigné 
#- el copyright
#- >a PSF, falta verificar si hay que solicitar algo previamente.
#- 
#- estas dos frases son incompatibles.
#-   dominio publico != PSF copyright

¿Estás seguro? Si PSF no dice lo contrario, quedaría de ellos.


#- >... 
#- >Se debe poder sobrecargar decimalSeparator y 
#- currencySymbol, para que
#- >se pueda cambiar facilmente haciendo una subclase. Ese mismo
#- >decimalSeparator es el que usa el constructor al recibir una string.
#- 
#- no mencionas los separadores de miles. tampoco haces mencion a temas
#- de localizacion.

No uso separadores de miles, no se me ocurrió, pero lo voy a agregar (con ''
como default).

Con respecto a localización, ¿a qué te referís?


#- >...
#- >Llamar a repr() no debe devolver str(self) ...  Por lo tanto, repr()
#- >debe mostrar una tupla de tres valores: IntPart, FracPart, 
#- Precision.
#- 
#- pero esto, seguiendo tu definicion del constructor, no cumple con:
#-    x == eval(repr(x))
#- verás que es un regla bastante comun en python. es muy practica.

Bien. Pero quedaría algo así:
	repr(Money(23.3, 2)) --> 'Money(23.3, 2)'

¿Es útil?


#- >Que se pueda:
#- >	- usar como clave en dict
#- >	- usar como booleano
#- >	- hacer un pickle
#- 
#- falta rigor en lo que propones. en python cualquier casi cosa puede
#- ser usada como clave en diccionarios. 

Mientras sea inmutable...


#- deberías ser mas concreto deciendo algo como:
#-   a, b son de tipo Money. hash(a) == hash(b) iif a == b
#- idem para bool y pickle.

El tema es que leyendo ya no recuerdo qué, indicaba que ciertas clases o
determinadas construcciones no eran aptas para pickle a menos que tuvieran
un método especial, etc. No recuerdo bien.


#- >Que el redondeo sea el financiero ...
#- lo siento. no entiendo el dibujito. ;-)

¡No se como explicarlo!

Voy a tratar de redactarlo un poquito mejor, :)

El redondeo financiero es el siguiente. Cuando recortás el nro en una
posición, te fijás en el dígito a la derecha de esa posición. Si es mayor a
cinco, incrementás en uno al dígito a la izquierda de esa posición, si es
menor a cinco, no lo incrementás:
	1.123 --> 1.12
	1.128 --> 1.13

El tema es cuando el dígito a la derecha es igual a cinco. En ese caso, si
el dígito a la izquierda es par, no se incrementa, si es impar, sí.
	1.125 --> 1.12
	1.135 --> 1.14

Si se entiende, lo dejo así, :)

#- suerte!
#- -Hernan

Gracias!




Más información sobre la lista de distribución Python-es