用js实现小数转分数
- 先将小数点后的数字转换为分子,小数点的位数加上1作为分母。
- 使用欧几里得算法来找到分子和分母的最大公约数(GCD),并将其用于简化分数。
我没有考虑无线循环小数和负小数
function decimalToFraction(decimal) {
// 转换小数为分数
let fraction = {
numerator: decimal.toString().replace(".", ""),
denominator: "1" + "0".repeat(decimal.toString().split(".")[1].length)
};
// 简化分数
let gcd = function gcd(a, b) {
return b ? gcd(b, a % b) : a;
};
let divisor = gcd(fraction.numerator, fraction.denominator);
fraction.numerator = fraction.numerator / divisor;
fraction.denominator = fraction.denominator / divisor;
return fraction;
}
// 测试
console.log(decimalToFraction(0.75)); // { numerator: 3, denominator: 4 }
console.log(decimalToFraction(0.333)); // { numerator: 1, denominator: 3 }
console.log(decimalToFraction(0.125)); // { numerator: 1, denominator: 8 }