Me he topado con el muy vilipendiado problema de aritmética de punto flotante. Estoy trabajando en un programa que usa moneda. Y poco a poco en el desarrollo de mi programa, me di cuenta de que la aritmética de punto flotante me estaba causando problemas. Así que decidí convertir los números de coma flotante utilizados para representar los valores en números enteros que, con suerte, evitarían problemas de lógica y comparación en el futuro...
Pero incluso este proceso de convertir los flotantes a enteros no va bien. Hay un valor en particular que está causando un problema. Me pregunto por qué este valor en particular. ¿Alguien tiene alguna sugerencia que sería una mejor manera de abordar este problema? No puedo usar ninguna biblioteca, es parte de un proyecto de evaluación.
Aquí está el código:
function checkCashRegister(price, cash, cid) { price *= 100; cash *= 100; for (let i = 0; i < cid.length; i++) { cid[i][1] = cid[i][1] * 100; } console.log(price); console.log(cash); console.log(cid); } console.log( checkCashRegister(19.23, 200, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]) );Y aquí está la salida a la consola:
>> 1923 >> 20000 >> Array(9) 0: (2) ['PENNY', 101] 1: (2) ['NICKEL', 204.99999999999997] 2: (2) ['DIME', 310] 3: (2) ['QUARTER', 425] 4: (2) ['ONE', 9000] 5: (2) ['FIVE', 5500] 6: (2) ['TEN', 2000] 7: (2) ['TWENTY', 6000] 8: (2) ['ONE HUNDRED', 10000] length: 9 [[Prototype]]: Array(0)Todo parece funcionar según lo planeado, excepto por el valor único, "Nickel" en la posición [1] en la matriz.
Realmente aprecio cualquier consejo sobre esto... o si alguien pudiera arrojar algo de luz sobre por qué este valor específico está jugando. Gracias. Cualquier ayuda es muy apreciada.