]> git.wincent.com - hextrapolate.git/blob - src/convert.js
a7f80aecd48256be193f860600a9d568dfdca0b0
[hextrapolate.git] / src / convert.js
1 /**
2  * Copyright 2003-present Greg Hurrell. All rights reserved.
3  * Licensed under the terms of the MIT license.
4  *
5  * @flow
6  */
7
8 import addDigits from './addDigits';
9 import getDigits from './getDigits';
10 import joinDigits from './joinDigits';
11 import multiplyDigits from './multiplyDigits';
12
13 /**
14  * Convert `number` in base `inBase`, to base `outBase`.
15  */
16 export default function convert(
17   number: string,
18   inBase: number,
19   outBase: number
20 ): string {
21   if (inBase === outBase) {
22     return number;
23   }
24   const digits = getDigits(number, inBase);
25   let result = [0];
26   let power = [1];
27   for (let i = 0; i < digits.length; i++) {
28     if (digits[i]) {
29       result = addDigits(
30         result,
31         multiplyDigits(power, digits[i], outBase),
32         outBase
33       );
34     }
35     power = multiplyDigits(power, inBase, outBase);
36   }
37   return joinDigits(result, outBase);
38 }