Tengo este codigo para una caja que debe devolver la cantidad de billetes y monedas de cada tipo, casi funciona, pero hay un fallo que hace que el resultado no sea exacto: justo en la resta donde dice: let cambio = entregado - totalApagar. tengo valores (predefinidos en el html para no tener que escribirlos de 25,10 total a pagar y 40 entregado, el caso es que el resultado de la resta me sale 14,89 cuando deberia salir 14,90 y no se por que...
'use strict'
function cambioCliente() {
document.getElementById("cambio").innerHTML = '';
let totalApagar = document.getElementById("totalApagar").value;
let entregado = document.getElementById("entregado").value;
totalApagar = convertir(totalApagar);
entregado = convertir(entregado);
let cambio = entregado - totalApagar;
console.log(cambio);
console.log('Ha entregado ' + entregado + ' , tiene que pagar ' + totalApagar);
console.log('El cambio es: ' + cambio);
let valor = [500, 200, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01];
for (let i = 0; i < valor.length; i++) {
if (cambio == 0) {
document.getElementById("cambio").innerHTML += 'Devolución 0€';
}
if (valor[i] < cambio) {
let resto = cambio % valor[i];
let cantidad = (cambio - resto) / valor[i];
if (valor[i] >= 5) {
document.getElementById("cambio").innerHTML += cantidad + 'billetes de ' + valor[i] + ' devolver: <br><hr>';
}
if (valor[i] < 5) {
let formulario = document.getElementById("formulario");
let informacion = document.getElementById("informacion");
document.getElementById("cambio").innerHTML += cantidad + 'monedas de ' + valor[i] + ' devolver: <br><hr>';
}
cambio = cambio - (valor[i] * cantidad);
}
}
}
function convertir(x) {
if (x.includes(",")) {
x = x.replace(',', '.');
}
return x
}
<form id="formulario" class="col-12">
<div class="mb-4">
<label for="totalApagar" class="form-label p-2 mb-3">Total a pagar</label>
<input type="text" class="form-control text-center" name="totalApagar" id="totalApagar" value="25,10">
</div>
<div class="mb-4">
<label for="entregado" class="form-label p-2 mb-3">Entregado</label>
<input type="text" class="form-control text-center" name="entregado" id="entregado" value="40">
</div>
<button type="button" class="btn" onclick="cambioCliente()">Enviar</button>
</form>
<div id="informacion" class="col-12 info bg-black">
<p id="cambio"></p>
<p id="billetes"></p>
<p id="monedas"></p>
</div>