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