This script multiplies three numbers.
This algorithm multiplies three floating-point numbers with high precision.
Project Stack: JavaScript.
function validarMonto(valorEsperado, valor1, valor2, valor3) {
const numbersParam = [valor1, valor2, valor3];
// Paso 1: separar parte entera y decimal
const dataNumbers = numbersParam.map(num => {
const [intPart, decPart = ""] = String(num).trim().split(".");
const numberInt = BigInt((intPart + decPart) || "0");
return { numberInt, decimals: decPart.length };
});
// Paso 2: multiplicar todos los enteros
const totalMultiplicationInt = dataNumbers.reduce(
(accumulatedProduct, listNumbers) => accumulatedProduct * listNumbers.numberInt,
BigInt(1)
);
// Paso 3: sumar todos los decimales
const totalDecimals = dataNumbers.reduce(
(accumulatedSum, listNumbers) => accumulatedSum + listNumbers.decimals,
0
);
// Paso 4: reconstruir el resultado con punto decimal
const resultStr = totalMultiplicationInt.toString();
const pointPosition = resultStr.length - totalDecimals;
let resultToMultiplication;
if (pointPosition > 0) {
resultToMultiplication =
resultStr.slice(0, pointPosition) + "." + resultStr.slice(pointPosition);
} else {
resultToMultiplication =
"0." + "0".repeat(-pointPosition) + resultStr;
}
// Paso 5: eliminar ceros extra al final
resultToMultiplication = resultToMultiplication.replace(/\.?0+$/, "");
return ("Resultado: " + resultToMultiplication + " Valor esperado: " + valorEsperado);
}
// Ejemplo de uso:
console.log(validarMonto(1250 * 18.4639 * 1.1582, "1250", "18.4639", "1.1582"));