JavaScript中的十进制到分数

时间:2013-01-24 21:17:21

标签: javascript

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

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 Bin:http://jsbin.com/exepir/1/edit

3 个答案:

答案 0 :(得分:7)

你不能“分割”数字。

如果你看一下控制台,你会看到

  

未捕获的TypeError:对象1.75没有方法'split'

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

最容易修复?通过将其写为字符串文字来使其成为字符串:

var decimal = '1.75';

或者在拆分之前致电.toString()

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

分子排在最前面:

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

答案 1 :(得分:1)

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

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

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

console.log(numerator + " / " + denominator);
// >> "175 / 100"

答案 2 :(得分:1)

如果你想确保它适用于一般情况,我会依赖经过良好测试的库,例如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"