| '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 |