4

我编写了这个简单的脚本来将小数转换为分数,但它不起作用。什么都没有输出。

var decimal = 1.75;
var decimalArray = decimal.split("."); // 1.75
var leftDecimalPart = decimalArray[0]; // 1
var rightDecimalPart = decimalArray[1]; // 75

var numerator = leftDecimalPart + rightDecimalPart; // 175
var denominator = Math.pow(10, rightDecimalPart.length); // 100

document.write(numerator + " / " + denominator);

JS 斌:http: //jsbin.com/exepir/1/edit

4

3 回答 3

8

您不能“拆分”数字。

如果您查看控制台,您会看到

未捕获的类型错误:对象 1.75 没有方法“拆分”

您应该使用 JSBin 上的 JavaScript 部分,它会在底部的红色框中显示类似这样的错误。

最简单的修复?通过将其写为字符串文字使其成为字符串:

var decimal = '1.75';

.toString()在拆分前致电:

var decimalArray = decimal.toString().split(".");

分子在最上面:

document.write(numerator + " / " + denominator);
于 2013-01-24T21:19:17.680 回答
2

由于使用字符串不是解决问题的最佳方法,我建议您使用仅适用于数字的快速替代解决方案:

var decimal = 1.75,
    numerator = decimal,
    denominator = 1;

while (numerator % 1) numerator *= 10;
denominator = numerator / decimal;

console.log(numerator + " / " + denominator);
// >> "175 / 100"
于 2013-01-24T21:53:04.293 回答
2

如果你想确保它在一般情况下工作,我会依赖一个经过良好测试的库,比如Fraction.js

var f = new Fraction(1.75);

console.log(f.toFraction()); // Results "1 3/4"
console.log(f.s * f.n + " / " + f.d); // Results "7 / 4"
console.log(f.toString()); // Results "1.75"
于 2015-06-04T12:17:44.977 回答