aureooms/js-rational

View on GitHub
src/_parse_fixed_point.js

Summary

Maintainability
A
0 mins
Test Coverage
import DECIMAL_PREFIX from './constants/DECIMAL_PREFIX.js';
import REPETEND_PREFIX from './constants/REPETEND_PREFIX.js';

const _parse_fixed_point = ({_chr, reg, sub}) => (base, s) => {
    const [integral, decimal] = s.split(DECIMAL_PREFIX);
    const [transient, repetend] = decimal.split(REPETEND_PREFIX);

    const _integral = integral === '0' ? '' : integral;
    const _repetend = repetend || '';

    const _denominator =
        (!_repetend
            ? _chr(1)
            : new Array(repetend.length + 1).join(_chr(base - 1))) +
        new Array(transient.length + 1).join(_chr(0));

    const _big = _integral + transient + _repetend;
    const _small = _integral + transient || '0';

    const _bign = reg(_big, base);
    const _smalln = reg(_small, base);

    const numerator = _repetend ? sub(_bign, _smalln) : _smalln;
    const denominator = reg(_denominator, base);

    return [numerator, denominator];
};

export default _parse_fixed_point;