UNPKG

1.88 kBJavaScriptView Raw
1'use strict';
2
3var deepMap = require('../../../utils/collection/deepMap');
4
5function factory(type, config, load, typed) {
6 /**
7 * Create a fraction convert a value to a fraction.
8 *
9 * Syntax:
10 * math.fraction(numerator, denominator)
11 * math.fraction({n: numerator, d: denominator})
12 * math.fraction(matrix: Array | Matrix) Turn all matrix entries
13 * into fractions
14 *
15 * Examples:
16 *
17 * math.fraction(1, 3)
18 * math.fraction('2/3')
19 * math.fraction({n: 2, d: 3})
20 * math.fraction([0.2, 0.25, 1.25])
21 *
22 * See also:
23 *
24 * bignumber, number, string, unit
25 *
26 * @param {number | string | Fraction | BigNumber | Array | Matrix} [args]
27 * Arguments specifying the numerator and denominator of
28 * the fraction
29 * @return {Fraction | Array | Matrix} Returns a fraction
30 */
31 var fraction = typed('fraction', {
32 'number': function number(x) {
33 if (!isFinite(x) || isNaN(x)) {
34 throw new Error(x + ' cannot be represented as a fraction');
35 }
36
37 return new type.Fraction(x);
38 },
39
40 'string': function string(x) {
41 return new type.Fraction(x);
42 },
43
44 'number, number': function numberNumber(numerator, denominator) {
45 return new type.Fraction(numerator, denominator);
46 },
47
48 'null': function _null(x) {
49 return new type.Fraction(0);
50 },
51
52 'BigNumber': function BigNumber(x) {
53 return new type.Fraction(x.toString());
54 },
55
56 'Fraction': function Fraction(x) {
57 return x; // fractions are immutable
58 },
59
60 'Object': function Object(x) {
61 return new type.Fraction(x);
62 },
63
64 'Array | Matrix': function ArrayMatrix(x) {
65 return deepMap(x, fraction);
66 }
67 });
68
69 return fraction;
70}
71
72exports.name = 'fraction';
73exports.factory = factory;
\No newline at end of file