MikeMcl / bignumber.js

A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic
http://mikemcl.github.io/bignumber.js
MIT License
6.63k stars 743 forks source link

eslint-plugin-big-number-rules #343

Open shuckster opened 1 year ago

shuckster commented 1 year ago

I made an eslint plugin some time ago that's reached v2 and I thought it was now useful enough to share more broadly.

Essentially it offers replacements like:

from to plugin will also suggest
0.1 + 0.2 BigNumber.sum(0.1, 0.2) ('').concat(0.1, 0.2) and `${0.1}${0.2}` when you want string-concatenation instead of FP arithmetic
result === 0.3 BigNumber(result).isEqualTo(0.3) Object.is(result, 0.3) when you want to strictly compare things that are not FP calculations
19.99 * 0.1 BigNumber(19.99).multipliedBy(0.1)
1 < 2 BigNumber(1).isLessThan(2)
2 >>> 4 BigNumber(2).shiftedBy(4)
4 << 2 BigNumber(4).shiftedBy(-2)
Math.min(1, 2) BigNumber.minimum(1, 2)
Math.sign(-6) BigNumber(-6).comparedTo(0)
(1).toFixed(2) BigNumber(1).toFixed(2)
parseFloat('1.2') BigNumber('1.2')
Number.parseFloat('2.1') BigNumber('2.1')

There's configuration to enforce the rules only in files that import 'bignumber.js', along with other ways and means to mitigate the number of warnings if you introduce the plugin into a large code-base.

It's proved useful to me and I hope for others too.