Primera pregunta: en java script si lo hacemos.
0.2 + 0.1 =>0.30000000000000004
Debido a que 0.2, 0.1 se redondean a un número diferente y también la suma se redondea a un número diferente. Este artículo explica el detrás de escena . Entiendo esto, pero cuando lo hago.
0.3 + 0 =>0.3
Muestra 0.3 ¿por qué? 0.3 no se puede representar exactamente en binario a la derecha y debe redondearse a un número diferente, ¿verdad?
por lo que el valor de 0,3 + 0 debe ser el número redondeado de 0,3 y la suma si es necesario?.
Segunda pregunta:
cuando lo hacemos
let x = 0.3
Como 0.3 no se puede representar exactamente en binario, se redondea a otro número, pero cuando accede a la variable x, ¿por qué muestra 0.3 pero no el número real redondeado?
x =>0.3
Pero cuando lo haces.
0.2 + 0.1 =>0.30000000000000004
Muestra el número real redondeado pero no 0.3. Explique amablemente.
El valor que obtiene cuando agrega 0.1
y 0.2
y el valor que obtiene del literal 0.3
son valores diferentes (ninguno de los cuales es exactamente 3/10, ambos están muy cerca). (Agregar 0
no importa, no cambia el valor del número al que se suma). El que obtienes de 0.1 + 0.2
es apenas más de 3/10; el que obtienes de 0.3
(si no recuerdo mal) es un poco menos de 3/10.
Al convertir un número de coma flotante en texto, JavaScript sigue la práctica común de incluir solo tantos dígitos como sea necesario para diferenciarlo del siguiente valor más cercano que el formato puede representar (detalles en la especificación y en el documento académico las referencias de la especificación ). 0.3
no necesita dígitos adicionales para esa diferenciación, pero 0.30000000000000004
sí (supongo que para diferenciarlo de 0.3
, pero en realidad no lo sé).