I would like to convert decimal of numbers to the nearest fraction with one number! For example, "8.75" should be "8 3/4", "1.875" should be "1 7/8" but "8,565217..." shouldn't display "8 13/23" but an error. There is a similar feature in Excel explained here
I also would like to avoid using third lib like fraction.js, and prefer using native JS/TS or Lodash! Does someone have an idea? =)
Thank you for your help!
EDIT: There is a part of the code i tried but doesn't work as expected cs 8.75 send me 35/4 and no 8 3/4...
private checkNumberToCompute(numberToCompute: any) {
let numberToReturn = numberToCompute;
if (
(!isNaN(Number(numberToCompute)) && numberToCompute.includes('.')) ||
(numberToCompute.includes(',') && !numberToCompute.includes('/'))
) {
console.log('Nombre à décimal sans fraction');
numberToReturn = this.computeFractions(numberToCompute);
}
return numberToReturn;
}
private computeFractions(numberToCompute: any): string {
console.log('numberToCompute', numberToCompute);
const lenghtOfDecimals = numberToCompute.substring(numberToCompute.indexOf('.') + 1).length;
let denominator = Math.pow(10, lenghtOfDecimals),
numerator = numberToCompute * denominator;
const divisor = this.gcd(numerator, denominator);
numerator /= divisor;
denominator /= divisor;
return Math.floor(numerator) + '/' + Math.floor(denominator);
}
private gcd(numerator: number, denominator: number): any {
if (denominator < 0.0000001) {
return numerator;
}
return this.gcd(denominator, Math.floor(numerator % denominator));
}