reliable-round
TypeScript icon, indicating that this package has built-in type declarations

1.0.10 • Public • Published

reliable-round

A reliable rounding library for JavaScript/TypeScript that actually behaves predictably (unlike Math.round).

npm version Build Status Coverage Status

Install

npm install reliable-round --save

Usage

import { round } from "reliable-round";
 
console.log(round(1.005)); // Rounds to a whole integer, returning 1
 
console.log(round(1.005, 2)); // Rounds to 2 decimal places returning 1.01

Why do I need this?

Because JavaScript floating point math often results in quirky and unpredictable results.

The classic JS WTF example is:

console.log(0.1 + 0.2);
 
// Evaluates to 0.30000000000000004

Maybe not what you expected right?

As for rounding, lets say you need to round to 2 decimal places then you can create your own function like this:

function roundToTwoDecimalPlaces(value) {
  return Math.round(value * 100) / 100;
}
 
console.log(roundToTwoDecimalPlaces(1.006));
 
// Returns 1.01 - Correct!

At first glace, the output of the above function looks correct. But unfortunately its only correct some of the time!

console.log(roundToTwoDecimalPlaces(1.005));
 
// Returns 1 - Wrong!
 
// The correct answer is 1.01

If you deal with rounding many floats in JS you will inevitably encounter many quirky inconsistencies like this.

reliable-round to the rescue!

import { round } from "reliable-round";
 
console.log(round(1.005, 2));
 
// Correctly returns 1.01

While you will get predictable, reliable results using reliable-round be aware that it is at the expense of performance. Traditional methods of rounding that use the Math class are much faster but at the expense of accuracy. You need to decide what's more important for your use-case.

Contributing

Got an issue or a feature request? Log it.

Pull-requests are also welcome. 😸

Package Sidebar

Install

npm i reliable-round

Weekly Downloads

391

Version

1.0.10

License

MIT

Unpacked Size

6.05 kB

Total Files

4

Last publish

Collaborators

  • codeandcats