https://github.com/seccomiro/safe-decimals
A Node.js module that fixes the binary floating-point rounding "error" at the 17th decimal place of JavaScript numbers
https://github.com/seccomiro/safe-decimals
floating-point-arithmetic javascript nodejs
Last synced: about 1 year ago
JSON representation
A Node.js module that fixes the binary floating-point rounding "error" at the 17th decimal place of JavaScript numbers
- Host: GitHub
- URL: https://github.com/seccomiro/safe-decimals
- Owner: seccomiro
- Created: 2019-08-12T16:34:31.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2019-08-12T19:14:42.000Z (almost 7 years ago)
- Last Synced: 2025-04-09T06:36:26.002Z (about 1 year ago)
- Topics: floating-point-arithmetic, javascript, nodejs
- Language: JavaScript
- Size: 1.95 KB
- Stars: 11
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Safe Decimals
**Safe Decimals** is a Node.js module that fixes the binary floating-point rounding "error" at the 17th decimal place of JavaScript numbers.
It does this using the simple and widespread *multiply-round-divide* technique.
## Installation
To start using Safe Decimals in your Node.js projects, first just need to install it through NPM:
```bash
npm i safe-decimals --save
```
## Requiring the module
In order to use it, you have to import it in your code:
```javascript
require('safe-decimals');
```
**P.S. 1** You don't need to store it on any variable, because Safe Decimals module doesn't export anything.
**P.S. 2** Safe Decimals will inject a function into the `Number` prototype. So you should require it in your code as soon as possible.
## How to use
Once imported, the module automatically provides a `safe()` function for all the `Number`s:
```javascript
const x = 0.1 + 0.2; // This will evaluate "x" as 0.30000000000000004 instead of 0.3
const newX = x.safe(); // newX == 0.3
```
Please note that Safe Decimals will never mutate your original number, so you can safely use it over any variable and store the result into a new one.
## Notes
Safe Decimals will work great if you don't need more than 15 decimals places. I think that's almost 100% of the cases. If you need more than that, you should look for another module that handles big decimals.
Please keep in mind that we shouldn't touch the built-in prototypes, so use Safe Decimals at your own risk.
The *multiply-round-divide* technique is a well-known workaround. This module just packs it into a Node.js module.