Преобразовать дробную строку в десятичную? - PullRequest
23 голосов
/ 22 августа 2011

Я пытаюсь создать функцию javascript, которая может принимать входную строку дроби, такую ​​как '3/2', и преобразовывать ее в десятичную - в виде строки '1.5' или числа 1.5

function ratio(fraction) {
    var fraction = (fraction !== undefined) ? fraction : '1/1',
    decimal = ??????????;
    return decimal;
});

Есть ли способ сделать это?

Ответы [ 14 ]

0 голосов
/ 13 марта 2018

Функция (ES6):

function fractionToDecimal(fraction) {
  return fraction
    .split('/')
    .reduce((numerator, denominator, i) =>
      numerator / (i ? denominator : 1)
    );
}

Функция (ES6, конденсированная):

function fractionToDecimal(f) {
  return f.split('/').reduce((n, d, i) => n / (i ? d : 1));
}

Примеры:

fractionToDecimal('1/2');     // 0.5
fractionToDecimal('5/2');     // 2.5
fractionToDecimal('1/2/2');   // 0.25
fractionToDecimal('10/5/10'); // 0.2
fractionToDecimal('0/1');     // 0
fractionToDecimal('1/0');     // Infinity
fractionToDecimal('cat/dog'); // NaN
0 голосов
/ 04 июня 2015

Если вы хотите использовать результат в виде дроби, а не просто получить ответ из строки, библиотека, подобная https://github.com/infusion/Fraction.js, вполне справилась бы с этой задачей.

var f = new Fraction("3/2");
console.log(f.toString()); // Returns string "1.5"
console.log(f.valueOf()); // Returns number 1.5

var g = new Fraction(6.5).div(.5);
console.log(f.toString()); // Returns string "13"
0 голосов
/ 21 января 2014

Работает с методом eval (), но вы можете использовать метод parseFloat. Я думаю, что это лучше! К сожалению, он будет работать только с такими значениями - «12.2», а не «5/8», но, поскольку вы можете справиться с расчетами, я думаю, что это хороший подход!

0 голосов
/ 20 февраля 2013

Чтобы преобразовать дробь в десятичную дробь, просто разделите верхнее число на нижнее число.5 делится на 3 будет 5/3 или 1,67.Очень похоже на:

function decimal(top,bottom) {
    return (top/bottom)
}

Надеюсь, это поможет, хаха

...