Get exact decimal representation of JavaScript number

Every final number in JavaScript has an exact real meaning. For instance:

const x = Number.MAX_VALUE

Here, the xexact value is 2 1024 - 2 971 =

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

and we can demonstrate this using xin arithmetic:

console.log(x % 10000) // 8368

But how can I get all of these decimal digits?

I would like the solution also to work for non-integer numbers, for example const y = Number.EPSILONit would be exactly 2 -52 =

0.0000000000000002220446049250313080847263336181640625

+4
source share
2 answers

Additional numbers that you need are not missed if you use a different base, for example. 2 (binary) in the call toString. You can then pass this line to a library with arbitrary precision, such as decimal.js, and fine -tune it from there.

const Decimal = require('decimal.js')
const x = Number.MAX_VALUE
console.log(new Decimal('0b' + x.toString(2)).toString())

This gives the line:

1.79769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368e + 308

. :

new Decimal('0b' + Number.EPSILON.toString(2)).toString()

2.220446049250313080847263336181640625e-16

, new Decimal(Number.MAX_VALUE).toString() . BigInteger.js. . , , . .

+1

.

14 , . 2 ^ 52

- , .

  • 1 . , 0 -0
  • 52 , 14 .
  • 11 , , . 2 ^

. wiki Double-precision_floating-point_format.

-2

Source: https://habr.com/ru/post/1681065/


All Articles