# @freemework/decimal.bignumberjs

> decimal.bignumberjs library of the Freemework Project.

Latest version **0.16.0** (published 2025-05-08) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @freemework/decimal.bignumberjs
pnpm add @freemework/decimal.bignumberjs
yarn add @freemework/decimal.bignumberjs
bun add @freemework/decimal.bignumberjs
```

## Health

**Score 35/100 (D)** — status: maintenance-mode.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.16.0 |
| Published | 2025-05-08 |
| First published | 2022-08-11 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=16.0.0 <23 |
| Dependencies | 3 |
| Unpacked size | 76.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Freemework Project |
| Maintainers | maxim.anurin |
| Keywords | freemework, free, me, work, decimal |

## Links

- npm: https://www.npmjs.com/package/@freemework/decimal.bignumberjs
- Repository: https://github.com/freemework/decimal
- Homepage: https://docs.freemework.org/#common?lang=typescript
- Issues: https://github.com/freemework/decimal/issues
- npm.io page: https://npm.io/package/@freemework/decimal.bignumberjs

## Dependencies (3)

- [@types/node](https://npm.io/package/@types/node.md) ^22.15.17
- [bignumber.js](https://npm.io/package/bignumber.js.md) ^9.3.0
- [@freemework/common](https://npm.io/package/@freemework/common.md) ^0.16.0

## Alternatives

- [@js-joda/timezone](https://npm.io/package/@js-joda/timezone.md) — 383.4K weekly downloads
- [chartjs-adapter-moment](https://npm.io/package/chartjs-adapter-moment.md) — 210.8K weekly downloads
- [strftime](https://npm.io/package/strftime.md) — 171.2K weekly downloads
- [vue-flatpickr-component](https://npm.io/package/vue-flatpickr-component.md) — 115.8K weekly downloads
- [timepicker](https://npm.io/package/timepicker.md) — 51.0K weekly downloads

## Recent versions

- 0.16.0 (latest) — 2025-05-08
- 0.15.3 — 2025-05-05
- 0.14.17 — 2025-03-07
- 0.14.10 — 2024-10-25
- 0.14.8 — 2024-09-09
- 0.14.4 — 2024-09-03
- 0.13.1 — 2024-01-21
- 0.13.0 — 2024-01-21
- 0.12.3 — 2024-01-18
- 0.12.2 — 2024-01-18
- 0.12.1 — 2024-01-18
- 0.11.5 — 2024-01-15
- 0.11.4 — 2024-01-15
- 0.11.3 — 2024-01-15
- 0.10.15 — 2023-12-04
- … 14 more at https://npm.io/package/@freemework/decimal.bignumberjs/versions

## README

# Freemework
[![npm version badge](https://img.shields.io/npm/v/@freemework/decimal.bignumberjs.svg)](https://www.npmjs.com/package/@freemework/decimal.bignumberjs)
[![downloads badge](https://img.shields.io/npm/dm/@freemework/decimal.bignumberjs.svg)](https://www.npmjs.org/package/@freemework/decimal.bignumberjs)
[![commit activity badge](https://img.shields.io/github/commit-activity/m/freemework/decimal)](https://github.com/freemework/decimal/pulse)
[![last commit badge](https://img.shields.io/github/last-commit/freemework/freemework)](https://github.com/freemework/freemework/graphs/commit-activity)

FDecimal is a data type for storing decimal values and manipulate its via mathematical functions according infinite-precision arithmetic.
It should be used when it is important to preserve exact precision, for example with monetary data.

###### Problems of JavaScript [IEEE 754 floating point numbers](https://en.wikipedia.org/wiki/IEEE_754).
##### Approximation
```javascript
const totalMoney = 600.9;
const pricePerItem = 200.3;
const totalSpent = pricePerItem * 3;

console.log(totalMoney === totalSpent); // false (while expected true)
console.log(totalSpent); // 600.9000000000001
```
##### Digits limit
```javascript
const left = parseInt("123456789012345678901234567890");
const right = parseInt("1");
const result = left + right;
console.log(result); // 1.2345678901234568e+29 (while expected 123456789012345678901234567891)
```

### Examples

You can see a lot of examples in unit tests. Here we show some points only.

### Avoid approximation

```javascript
const { FDecimal } = require("@freemework/decimal.bignumberjs");

const totalMoney = FDecimal.fromFloat(600.90, 2);
const pricePerItem = FDecimal.fromFloat(200.30, 2);
const buyItems = FDecimal.fromInt(3);
const totalSpent = FDecimal.multiply(pricePerItem, buyItems);

console.log(FDecimal.equalsTo(totalMoney, totalSpent)); // true
console.log(FDecimal.toString(totalSpent));             // 600.9
```
### Avoid digits limit

```javascript
import { FDecimal } from "@freemework/decimal.bignumberjs";

const left = "123456789012345678901234567890";
const right = "1";
const result = FDecimal.plus(left, right);
console.log(result); // 123456789012345678901234567891
```

## Documentation
- [Getting Started](docs/getting-started.md)
- [Examples](docs/functions.md#examples)
- [Overview](docs/functions.md)

## Build
```bash
npm install
npm run build
```

This will build the library and put them in the folder .dist

## Test
To execute tests for the library, install the project dependencies once:
```bash
npm install
npm run build
npm run test
```

---
_Source: https://npm.io/package/@freemework/decimal.bignumberjs · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
