I have a function to calculate the percentage of transaction fees. To test it, I wrote the function below to ensure that the rate calculations are accurate. However, the calculated rate (1 - part/whole) * 100
is off by a tiny margin to the actual rate passed to the function.
Is there a way to correct the error and ensure that rate === calculated rate
?
P.S: Rounding to a fixed number of decimal places would not fix the problem as the rate can have a varying number of decimal places.
const getAmount = (amount, rate) => {
const fee = amount * (rate / 100);
const amountAfterFee = amount - fee;
const calculatedRate = (1 - amountAfterFee / amount) * 100;
return { amount, fee, amountAfterFee, rate, calculatedRate };
};
console.log(getAmount(3000, 5));
// { amount: 3000, fee: 150, amountAfterFee: 2850, rate: 5, calculatedRate: 5.000000000000004 }
console.log(getAmount(3000, 6.0));
// { amount: 3000, fee: 180, amountAfterFee: 2820, rate: 6, calculatedRate: 6.000000000000005 }
console.log(getAmount(3000, 7.3));
// { amount: 3000, fee: 219, amountAfterFee: 2781, rate: 7.3, calculatedRate: 7.299999999999995 }
console.log(getAmount(3000, 8.12345));
// { amount: 3000, fee: 243.7035, amountAfterFee: 2756.2965, rate: 8.12345, calculatedRate: 8.123449999999998 }