Aprovecha el precio especial

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comienza ahora

Termina en:

00h

29m

05s

2

Como arreglar el problema de los decimales en JavaScript

JavaScript puede llegar a tener comportamientos muy extraños. Uno de ellos es como trata a los decimales y es que JS no es muy preciso con ellos, haciendo operaciones sin sentido como:

3 * 10.3; //el resultado debería ser 30.9//pero JS da 30.900000000000002

Este comportamiento errático de JavaScript puede llevar a errores fatales en nuestras aplicaciones. Entonces, ¿Cómo arreglo esto?
Pues en este mismo curso se propone una solución, pero… la verdad es que no es muy robusta.

Esta es la solución que se propone:

let price = 10.3;

let total = 3 * price; 
//el resultado debería ser 30.9//pero js da 30.900000000000002//para arreglarlo
total = Math.round( 3 * 100 * price ) / 100;
//primero multiplicamos el numero por 100 para trabajar con un entero//si en el resultado de esa operación hay decimales se redondean//y se divide entre 100 para volver a pasarlo a decimales

Si eres observador habrás notado que aquí hay un problema… esto solo sirve para números con dos decimales, esta limitación viene del 100 por el que multiplicamos y dividimos. Este numero debe tener la misma cantidad de ceros que decimales la variable price.
Eso es lo que te enseñaré aquí, como hacer que la cantidad de ceros sea dinámica.

letnumber = 9.639;
let decimalNumbers = number.toString();

//se toman los números después del punto
decimalNumbers = decimalNumbers.substr( decimalNumbers.indexOf(".") + 1, decimalNumbers.length - 1 );

let decimalNumbersLength = decimalNumbers.length;

//se eleva el10ala cantidad de números decimales que hay
//para tener un numero conla misma cantidad de ceros que decimales
let fixNumber = 10 ** decimalNumbersLength; 

total = Math.round( 3 * fixNumber * number ) / fixNumber;
<h3>Espero que te haya servido. 😉💚</h3>
Escribe tu comentario
+ 2
Ordenar por:
1
3569Puntos
5 años

gracias por este tutorial, lo tomaré en cuenta para el futuro 😮