npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

typescript-bignumber

v2.0.0

Published

A native big decimal NPM library for typescript using BigInt class to support 18 digit floating point number arithmetics with high precision in the range -1e36 to 1e36, inclusive.

Readme

Typescript BigNumber

A native big decimal NPM library for Typescript using the BigInt class. It supports fixed-point decimal arithmetic with 18 decimal places in the range -1e36 to 1e36, inclusive.

npm version npm downloads

Features

  • Support for fixed-point numbers in the range [-1e36, 1e36] with 18 decimal places.
  • Static constructors: copysign(), fromBigInt(), fromString().
  • Static constants: E, EULER, INF, POSITIVE_INFINITY, NEG_INF, NEGATIVE_INFINITY, LN_10, LN_2, PI.
  • Type conversion methods: toBigInt(), toString(), toInteger().
  • Type check methods: isInteger(), isPositive().
  • Arithmetic conversion methods: abs(), ceil(), floor(), inv(), neg(), round(), trunc().
  • Logic comparison methods: equals(), gt(), greaterThan(), gte(), greaterThanOrEqual(), lt(), lessThan(), lte(), lessThanOrEqual().
  • Arithmetic operations: add(), sub(), mul(), div(), mod().

The library does not include a fromNumber() function to preserve precision.

Installation

Node.js 22 or newer is required.

npm install typescript-bignumber

Usage

Once imported, you can use BigNumber in any Typescript project.

import { BigNumber } from 'typescript-bignumber';

const x = BigNumber.fromString('1.28');
const y = BigNumber.fromBigInt(2n);

console.log(x.mul(y).toString()); // 2.56

Creating a BigNumber

You can create a new BigNumber by using fromString() or fromBigInt(). The class does not include a public constructor.

const x = BigNumber.fromString('12.374738');
const y = BigNumber.fromBigInt(12489203475n);

fromString() supports a dot or comma as the decimal separator and also supports scientific notation.

const x = BigNumber.fromString('12,374738');
const y = BigNumber.fromString('1.27e-5');

If the given number has more than 18 decimal places, it is rounded to the 18th decimal place. Ties are rounded away from zero.

const x = BigNumber.fromString('1.9999999999999999999');

console.log(x.toString()); // 2

copysign() takes two BigNumber instances and returns the first argument with the sign of the second argument.

const x = BigNumber.fromString('1.2');
const sign = BigNumber.fromString('-1');

console.log(BigNumber.copysign(x, sign).toString()); // -1.2

Formatting and Conversion

toString() serializes the instance without unnecessary trailing zeros. Pass true to always include all 18 decimal places.

const x = BigNumber.fromString('12.54');

console.log(x.toString());     // 12.54
console.log(x.toString(true)); // 12.540000000000000000

toBigInt() returns the closest BigInt. toInteger() returns the same rounded integer as a string.

const x = BigNumber.fromString('12.54');

console.log(x.toBigInt());  // 13n
console.log(x.toInteger()); // 13

toBigInt(), toInteger(), and round() follow Math.round() behavior. Ties are rounded toward positive infinity.

console.log(BigNumber.fromString('-1.5').round().toString()); // -1

Static Constants

Commonly used mathematical constants are defined under the class and rounded to 18 decimal places.

BigNumber.E;     // Also available as BigNumber.EULER
BigNumber.LN_10;
BigNumber.LN_2;
BigNumber.PI;

INF and NEG_INF are the finite upper and lower bounds of the library. They are also available as POSITIVE_INFINITY and NEGATIVE_INFINITY.

console.log(BigNumber.INF.toString());
// 1000000000000000000000000000000000000

console.log(BigNumber.NEG_INF.toString());
// -1000000000000000000000000000000000000

Methods

Methods that return a BigNumber create a new instance and do not change the existing instance.

| Method | Description | | --- | --- | | abs() | Returns the absolute value. | | ceil() | Returns the smallest integer greater than or equal to the value. | | floor() | Returns the largest integer less than or equal to the value. | | inv() | Returns the inverse of the value. | | neg() | Returns the negation of the value. | | round() | Returns the value rounded to the closest integer. | | trunc() | Returns the integer part by removing fractional digits. | | equals(other) | Checks if both values are equal. | | gt(other), greaterThan(other) | Checks if the value is greater than other. | | gte(other), greaterThanOrEqual(other) | Checks if the value is greater than or equal to other. | | lt(other), lessThan(other) | Checks if the value is less than other. | | lte(other), lessThanOrEqual(other) | Checks if the value is less than or equal to other. | | add(other) | Adds other to the value. | | sub(other) | Subtracts other from the value. | | mul(other) | Multiplies the value by other. | | div(other) | Divides the value by other. | | mod(other) | Returns the remainder of division by other. |

Multiplication and division results are rounded to 18 decimal places. Ties are rounded away from zero.

mod() follows the Javascript remainder operator (%), including its behavior with negative numbers.

const x = BigNumber.fromString('126.289');
const y = BigNumber.fromString('34.433');

console.log(x.add(y).toString()); // 160.722
console.log(x.sub(y).toString()); // 91.856
console.log(x.mul(y).toString()); // 4348.509137
console.log(x.div(y).toString()); // 3.667673452792379403
console.log(x.mod(y).toString()); // 22.99

isInteger() checks if the value is an integer. isPositive() checks if the value is greater than zero; zero is not positive.

Range and Errors

All values and operation results must be in the range [-1e36, 1e36], inclusive.

  • Invalid strings, including NaN and infinity, throw a SyntaxError.
  • Values outside the supported range throw a RangeError.
  • Division or remainder by zero throws a RangeError.