-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfractionToDecimal.js
47 lines (36 loc) · 953 Bytes
/
fractionToDecimal.js
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
/**
* @param {number} numerator
* @param {number} denominator
* @return {string}
*/
var fractionToDecimal = function(numerator, denominator) {
const isNegative = numerator * denominator < 0;
let pnumerator = Math.abs(numerator);
let pdenominator = Math.abs(denominator);
const integer = Math.floor(pnumerator / pdenominator);
let res = integer + '';
if (isNegative) {
res = '-' + res;
}
pnumerator = pnumerator % pdenominator;
if (pnumerator === 0) {
return res;
}
res += '.';
let idx = res.length;
let m = new Map();
while (pnumerator !== 0) {
m.set(pnumerator, idx++);
pnumerator *= 10;
res += Math.floor(pnumerator / pdenominator);
pnumerator %= pdenominator;
if (m.has(pnumerator)) {
idx = m.get(pnumerator);
res = res.slice(0, idx) + '(' + res.slice(idx) + ')';
break;
}
}
return res;
};
// 判断余数是否重复出现
// 是 -> 小数开始循环