A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Core BigNumber constructor and instance creation functionality with support for different bases, input types, and special values.
Creates a new BigNumber instance from various input types with optional base specification.
/**
* Creates a new BigNumber instance
* @param n - Numeric value (string, number, bigint, or BigNumber instance)
* @param base - Number base (2-36, defaults to 10)
* @returns New BigNumber instance
*/
new BigNumber(n: BigNumber.Value, base?: number): BigNumber;
// Constructor can also be called without 'new'
BigNumber(n: BigNumber.Value, base?: number): BigNumber;Usage Examples:
import BigNumber from "bignumber.js";
// From string (recommended for precision)
const a = new BigNumber('123.456789');
const b = new BigNumber('1.23e+5');
const c = new BigNumber('-42.7e-10');
// From number (precision may be lost)
const d = new BigNumber(123.456789);
const e = new BigNumber(-42);
// From bigint (Node.js/modern browsers)
const f = new BigNumber(123456789012345678901234567890n);
// From another BigNumber
const g = new BigNumber(a);
// With different bases
const hex = new BigNumber('ff.8', 16); // 255.5 in decimal
const binary = new BigNumber('1011.101', 2); // 11.625 in decimal
const base36 = new BigNumber('zz.9', 36); // 1295.25 in decimal
// Without 'new' keyword
const h = BigNumber('999.999');BigNumber supports JavaScript's special numeric values with proper handling.
// Special values are supported
new BigNumber('Infinity'); // Positive infinity
new BigNumber('-Infinity'); // Negative infinity
new BigNumber('NaN'); // Not a Number
new BigNumber(NaN); // Not a Number
new BigNumber(-0); // Negative zero (preserved)Usage Examples:
// Special values
const infinity = new BigNumber('Infinity');
const negInfinity = new BigNumber('-Infinity');
const notANumber = new BigNumber('NaN');
const negZero = new BigNumber(-0);
console.log(infinity.toString()); // "Infinity"
console.log(negInfinity.toString()); // "-Infinity"
console.log(notANumber.toString()); // "NaN"
console.log(negZero.valueOf()); // "-0"BigNumber handles invalid inputs gracefully, returning NaN unless debug mode is enabled.
// Invalid inputs return BigNumber NaN (unless DEBUG = true)
new BigNumber('invalid'); // BigNumber NaN
new BigNumber('1.2.3'); // BigNumber NaN
new BigNumber(9, 2); // BigNumber NaN (9 is not valid in base 2)Debug Mode:
// Enable debug mode for error throwing
BigNumber.DEBUG = true;
try {
new BigNumber('invalid');
} catch (error) {
console.log(error.message); // "[BigNumber Error] Not a number"
}
try {
new BigNumber(9, 2);
} catch (error) {
console.log(error.message); // "[BigNumber Error] Not a base 2 number"
}When creating BigNumbers from JavaScript numbers, precision may be lost due to floating-point limitations.
Usage Examples:
// Precision loss from numeric literals
new BigNumber(1.0000000000000001); // "1" (precision lost)
new BigNumber(99999999999999999999); // "100000000000000000000"
// Use strings to preserve precision
new BigNumber('1.0000000000000001'); // "1.0000000000000001"
new BigNumber('99999999999999999999'); // "99999999999999999999"
// Floating-point arithmetic issues
new BigNumber(0.1 + 0.2); // "0.30000000000000004"
new BigNumber('0.1').plus('0.2'); // "0.3"BigNumber instances can be created from object literals with coefficient, exponent, and sign properties.
/**
* Create BigNumber from object literal (advanced usage)
* @param obj - Object with c (coefficient), e (exponent), s (sign) properties
*/
new BigNumber({
c: number[] | null, // Coefficient array (base 1e14)
e: number | null, // Exponent (-1e9 to 1e9)
s: number | null, // Sign (-1, 1, or null)
_isBigNumber: true // Internal identifier
}): BigNumber;Usage Examples:
// Object literal construction (advanced)
const x = new BigNumber({
s: 1,
e: 2,
c: [777, 12300000000000],
_isBigNumber: true
});
console.log(x.toString()); // "777.123"
// Verify object is well-formed
console.log(BigNumber.isBigNumber(x)); // truetype BigNumber.Value = string | number | bigint | BigNumber.Instance;
interface BigNumber.Instance {
readonly c: number[] | null; // Coefficient array
readonly e: number | null; // Exponent value
readonly s: number | null; // Sign value
[key: string]: any;
}