El culpable de eso seguramente es el algoritmo de redondeo de las
fracciones.
Dolphin:
11.115 roundTo: 0.01 -> 11.12
70.085 roundTo: 0.01 ->70.08
Vw:
11.115 roundTo: 0.01 -> 11.12
70.085 roundTo: 0.01 -> 70.09
La implementación de #roundTo: es la misma para los dos:
(self / factor) rounded * factor
Pero difieren en el algoritmo que usa la fracción para resolver el
rounded.
No tengo a mano el ANSI Smalltalk a ver si dice algo de que algoritmo
eligieron para resolver.
Los redondeos computacionalmente son un dolor de cabeza, evaluate esto:
100.64 fractionPart
Debería darte 0.64, pero
En dolphin tenés: 0.640000000000001
En Vw tenés: 0.639999
Y en VAST (no lo tengo instalado) me juego por un 0.639999
Conclusión, jamás intentes manejar dinero con Floats porque vas a sumar
cualquier fruta. Recuerdo que hay un bit de seteo en el procesador que
permite trabajar con mas o menos precisión del punto flotante, es muy
interesante. Estas son las veces que chocamos con la realidad de cuando
se va a binario y vuelve a decimal, juegan los errores. No todo es
exacto en este mundo, por suerte :-)
Saludos,
Hernán.-
> -----Mensaje original-----
> De: [email protected]
> [mailto:[EMAIL PROTECTED] En nombre de Santiago
> Cardoso Geller
> Enviado el: Miércoles, 26 de Abril de 2006 05:33 p.m.
> Para: clubSmalltalk
> Asunto: [clubSmalltalk] VAST - roundTo: 0.01
>
>
>
> Hola amigos. Quería comentar una experiencia.
>
> En VAST 6.0.3, el resultado de
>
> 1.115 roundTo: 0.01 es 1.11 cuando debería ser 1.12.
> Lo mismo pasa con 70.085. 70.085 roundTo: 0.01 -> 70.08
> cuando debería ser 70.09. Probé lo mismo convirtiéndolos a
> ScaledDecimal. No se arregla.
>
> Probé en VAST 4.5, pero también anda de la misma forma.
>
> Me fijé en Dolphin, y el primer caso devuelve el resultado
> esperado. 1.115 roundTo: 0.01 -> 1.12
>
> Pero con el otro numero no. Sigue andando "mal".
> 70.085. 70.085 roundTo: 0.01 -> 70.08
>
> La implementación de #roundTo: en ambos ST son distintas.
> Pero igual no andaría ninguna de las dos.
>
> ¿Alguien tuvo este tipo de problemas? ¿Tiene alguna solución?
>
> Gracias y abrazo para todos,
> Santiago
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
Ha recibido este mensaje porque está suscrito a Grupos de Google
"clubSmalltalk" grupo.
Si quiere publicar en este grupo, mande un correo electrónico a
[email protected]
Para anular la suscripción a este grupo, envíe un mensaje a [EMAIL PROTECTED]
Para visualizar más opciones, visite este grupo
enhttp://groups.google.com/group/clubSmalltalk
-~----------~----~----~----~------~----~------~--~---