Buenas tardes.
Tengo un problema con la division de Smalltalk, en un test que tengo hecho me sale error porque la comparación espera un 0.8 y recibe un 4/5 (que valen lo mismo). La división que hago sería algo como: numero/100. Necesitaría saber cómo hacer para que devuelva el resultado como un decimal y no como una fracción.
Saludos, Federico.
Hola Federico,
4
y 5
son instancias de la clase Integer
. Y /
es un mensaje de esa clase que, si recibe otro entero devuelve una instancia de la clase Fraction
. Ahora bien, 0.8
es una instancia de la clase Float
y si vos los comparás con el mensaje =
te va a dar siempre falso.
Tenés varias alternativas para hacer esa comparación.
- Podés convertir la fración a flotante con el mensaje
asFloat
- Podés convertir el flotante en fracción con el mensaje
asFraction
- O, además, podés realizar la comparación con el mensaje
closeTo:
en lugar de=
.
Recordá que por la manera en que los números fraccionarios son almacenados en una computadora no siempre es eficiente hacer una comparación con un simple igual. Por ejemplo, si ejecutás el siguiente código en el Playground estoy seguro de que en el Transcript no aparecerá 0.8 sino otra cosa:
Transcript show: 0.7 + 0.1
En el capítulo 16 del libro Deep into Pharo hay muchos más detalles acerca del manejo de números fraccionarios. Además en el capítulo 10 del libro Updated Pharo by Example tenés los detalles de las distintas clases de números que hay en Pharo y siempre podés usar el System Browser para ver la implementación de cada una de esas clases.
Saludos,
Tomás