Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #349 Convert a Fraction into a Decimal value

Parse a fraction value, f, into a decimal number, a.

For example, `1/2` is 0.5, and `3 1/8` is 3.125.

https://en.wikipedia.org/wiki/Fraction
https://en.wikipedia.org/wiki/Decimal

#include <string>
using namespace std;
int x (f.find(' ')), y (f.find('/'));
double a;
if (y == -1) a = stoi(f);
else {
    int n {stoi(f.substr(x + 1, y))},
        d {stoi(f.substr(y + 1))};
    a = double(n) / d;
    if (x not_eq -1)
        a += stoi(f.substr(0, x));
}
#include <regex>
using namespace std;
regex r {"[ /]"};
sregex_token_iterator i {
    f.begin(), f.end(), r, -1
}, n;
int x {stoi(*i++)}, y {stoi(*i++)};
double a {
    i not_eq n ?
        x + y / stod(*i) :
        x / double(y)
};
let x = f.indexOf(' '),
    y = f.indexOf('/'),
    a = 0
if (y == -1) a = parseInt(f)
else {
    let n = parseFloat(f.substr(x + 1, y)),
        d = parseFloat(f.substr(y + 1))
    a = n / d
    if (x != -1) a += parseInt(f.substr(0, x))
}
import static java.lang.Integer.parseInt;
String s[] = f.split("[ /]");
int m = s.length,
    n = parseInt(s[m - 2]),
    d = parseInt(s[m - 1]);
double a = ((double) n / d);
if (m > 2) a = a + parseInt(s[0]);
import static java.math.MathContext.DECIMAL128;
import java.math.BigDecimal;
String s[] = f.split("[ /]");
int m = s.length;
BigDecimal n = new BigDecimal(s[m - 2]),
           d = new BigDecimal(s[m - 1]),
           a = n.divide(d, DECIMAL128);
if (m > 2) a = a.add(new BigDecimal(s[0]));
Fractions
a := f.ToFloat;
from re import split
s = split('[ /]', f)
*i, n, d = map(int, s)
a = sum(i + [n / d])
from fractions import Fraction
p = lambda x: float(Fraction(x))
a = sum(map(p, f.split()))
a = sum(map(eval, f.split()))
a = f.split.map(&:to_r).sum.to_f

New implementation...
< >
reilas