gpt4 book ai didi

javascript - 将小数转换为分数

转载 作者:搜寻专家 更新时间:2023-11-01 05:10:20 29 4
gpt4 key购买 nike

我正在研究一个“玩具问题”,我应该编写一个 JavaScript 函数,将小数转换为分数并将其作为字符串返回。例如:fractionConverter(2.75) 应该返回“11/4”。

这是我的代码:

function fractionConverter (number) {
if (number > 0) {
var isNegative = false;
} else if (number < 0) {
var isNegative = true;
}

number = Math.abs(number);

if (number % 1 === 0) {
var finalFrac = number + "/1";
} else {
for (var i = 2; i < 10000000000; i++) {
if ((i * number) % 1 === 0) {
var finalFrac = (i * number) + "/" + i;
}
if (finalFrac) { break; }
}
}

var getFrac = function(numString, bool) {
if (!bool) {
return numString;
} else {
return "-" + numString;
}
}

return getFrac(finalFrac, isNegative);
}

抱歉格式化。无论如何,我遇到了一个奇怪的规范失败。该函数返回以下数字的正确值:0.5、3、2.5、2.75、-1.75 和 .88。然而,出于某种原因,它在 0.253213 上失败了。它返回 1266065/5000000 而不是 253213/1000000。不太清楚为什么。

谢谢

最佳答案

我只是在改进@william 的回答,我认为这个脚本给你更多的减少分数。

function fractionConverter(number) {
var fraction = number - Math.floor(number);
var precision = Math.pow(10, /\d*$/.exec(new String(number))[0].length);
var getGreatestCommonDivisor = function(fraction, precision) {
if (!precision)
return fraction;
return getGreatestCommonDivisor(precision, fraction % precision);
}
var greatestCommonDivisor = getGreatestCommonDivisor(Math.round(fraction * precision), precision);
var denominator = precision / getGreatestCommonDivisor(Math.round(fraction * precision), precision);
var numerator = Math.round(fraction * precision) / greatestCommonDivisor;

function reduce (numer,denom) {
for (var i = 2; i >= 9; i++) {
if ((numer%i===0) && (denom%i)===0) {
numerator=numer/i;
denominator=denom/i;
reduce(numerator,denominator);
};
};
}
reduce(numerator,denominator);
return numerator + "/" + denominator;
}

document.getElementById("output").innerHTML = fractionConverter(0.24888);

这是HTML

<body>
<p id="output"></p>
</body>

</html>

关于javascript - 将小数转换为分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35077091/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com