| Server IP : 68.183.124.220 / Your IP : 216.73.217.137 Web Server : Apache/2.4.18 (Ubuntu) System : Linux Sandbox-A 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : gavin ( 1000) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/gavin/workspace/readjs/node_modules/num2fraction/ |
Upload File : |
'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