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