Skip to content

Commit 5606fa9

Browse files
committed
Allow creating BigNumber with {s, e, c}
1 parent bde4ac1 commit 5606fa9

File tree

4 files changed

+32
-6
lines changed

4 files changed

+32
-6
lines changed

bignumber.d.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export namespace BigNumber {
109109
* Calling `toString` with a base argument, e.g. `toString(10)`, will also always return normal
110110
* notation.
111111
*/
112-
EXPONENTIAL_AT?: number|[number, number];
112+
EXPONENTIAL_AT?: number | [number, number];
113113

114114
/**
115115
* An integer, magnitude 1 to 1e+9, or an array, [-1e+9 to -1, 1 to 1e+9].
@@ -144,7 +144,7 @@ export namespace BigNumber {
144144
* The largest possible magnitude of a finite BigNumber is 9.999...e+1000000000.
145145
* The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000.
146146
*/
147-
RANGE?: number|[number, number];
147+
RANGE?: number | [number, number];
148148

149149
/**
150150
* A boolean: `true` or `false`. Default value: `false`.
@@ -330,10 +330,28 @@ export namespace BigNumber {
330330
suffix?: string;
331331
}
332332

333+
export interface BigNumberData {
334+
/**
335+
* The coefficient of the value of this BigNumber, an array of base 1e14 integer numbers.
336+
*/
337+
readonly c: number[];
338+
339+
/**
340+
* The exponent of the value of this BigNumber, an integer number, -1000000000 to 1000000000.
341+
*/
342+
readonly e: number;
343+
344+
/**
345+
* The sign of the value of this BigNumber, -1 or 1.
346+
*/
347+
readonly s: number;
348+
349+
[key: string]: any;
350+
}
333351
export type Instance = BigNumber;
334352
export type ModuloMode = 0 | 1 | 3 | 6 | 9;
335353
export type RoundingMode = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
336-
export type Value = string | number | BigNumber;
354+
export type Value = string | number | BigNumber | BigNumberData;
337355
}
338356

339357
export declare class BigNumber {
@@ -1057,7 +1075,7 @@ export declare class BigNumber {
10571075
* @param n A numeric value.
10581076
* @param [base] The base of n.
10591077
*/
1060-
multipliedBy(n: BigNumber.Value, base?: number) : BigNumber;
1078+
multipliedBy(n: BigNumber.Value, base?: number): BigNumber;
10611079

10621080
/**
10631081
* Returns a BigNumber whose value is the value of this BigNumber multiplied by `n`.

bignumber.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,8 @@
195195
if (b == null) {
196196

197197
// Duplicate.
198-
if (n instanceof BigNumber) {
198+
if (n instanceof BigNumber
199+
|| (n != null && n.s != null && n.e != null && n.c != null)) {
199200
x.s = n.s;
200201
x.e = n.e;
201202
x.c = (n = n.c) ? n.slice() : n;

doc/API.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ <h5 id="bignumber">
185185
BigNumber<code class='inset'>BigNumber(n [, base]) <i>&rArr; BigNumber</i></code>
186186
</h5>
187187
<p>
188-
<code>n</code>: <i>number|string|BigNumber</i><br />
188+
<code>n</code>: <i>number|string|BigNumber|BigNumberData</i><br />
189189
<code>base</code>: <i>number</i>: integer, <code>2</code> to <code>36</code> inclusive. (See
190190
<a href='#alphabet'><code>ALPHABET</code></a> to extend this range).
191191
</p>
@@ -268,6 +268,10 @@ <h5 id="bignumber">
268268
new BigNumber(823456789123456.3)
269269
// '[BigNumber Error] Not a base 2 number'
270270
new BigNumber(9, 2)</pre>
271+
<p>
272+
As a way to interact with other modules that are using BigNumber you can use BigNumberData directly
273+
</p>
274+
<pre>new BigNumber({ s: 1, e: 2, c: [ 777, 12300000000000 ] }) // '777.123'</pre>
271275

272276

273277

test/methods/BigNumber.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ Test('bigNumber', function () {
199199
t('-102', new BigNumber('-0o146').toString());
200200
t('0.5', new BigNumber('0o0.4').toString());
201201

202+
t('100002222.2222333322', new BigNumber({ s: 1, e: 8, c: [100002222, 22223333220000] }).toString())
203+
t('7777777777.123123123', new BigNumber({ s: 1, e: 9, c: [7777777777, 12312312300000] }).toString())
204+
202205
// Base-conversion tests
203206

204207
//var alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_';

0 commit comments

Comments
 (0)