Blame view

node_modules/num2fraction/index.js 804 Bytes
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  'use strict'
  
  var abs = Math.abs
  var round = Math.round
  
  function almostEq(a, b) {
    return abs(a - b) <= 9.5367432e-7
  }
  
  //最大公约数 Greatest Common Divisor
  function GCD(a, b) {
    if (almostEq(b, 0)) return a
    return GCD(b, a % b)
  }
  
  function findPrecision(n) {
    var e = 1
  
    while (!almostEq(round(n * e) / e, n)) {
      e *= 10
    }
  
    return e
  }
  
  function num2fraction(num) {
    if (num === 0 || num === '0') return '0'
  
    if (typeof num === 'string') {
      num = parseFloat(num)
    }
  
  
    var precision = findPrecision(num) //精确度
    var number = num * precision
    var gcd = abs(GCD(number, precision))
  
    //分子
    var numerator = number / gcd
    //分母
    var denominator = precision / gcd
  
    //分数
    return round(numerator) + '/' + round(denominator)
  }
  
  module.exports = num2fraction