-
Notifications
You must be signed in to change notification settings - Fork 200
Description
Hi,
when trying to parse a JSON-String which contains a very very big number, I get the following error message: "Bad number". The reason is, that you use isFinite() to check if the number is a finite one. However, according to the specification, Infinity is determined, as following:
"Infinity is displayed when a number exceeds the upper limit of the floating point numbers, which is 1.797693134862315E+308."
As a result, whenever a numeric value that will be parsed is larger than 1.797693134862315E+308, json-bigint is unable to parse the JSON file.
Nevertheless, bignumber.js also has a function isFinite(), which is able to handle values larger than 1.797693134862315E+308. Since from my point of view, this module should be used to parse JSON-files containing any numeric value, I would appreciate if the currently used function isFinite() will be replaced by the function isFinite() of bignumber.js. Find the different results of these function in the following example:
const BigNumber = require('bignumber.js');
console.log(isFinite(1.797693134862316E+308)) // false
console.log(BigNumber('1.797693134862316E+308').isFinite()) //true
I also added a small example, where you can see the value 3e+500 will not be parsed appropriately with json-bigint. However, when using the standard JSON parser, the value can be parsed, even though the returned value is of course incorrect.
var JSONbig = require('json-bigint')
let veryBigDecimal = `3e+500`
try {
let jsonBigResult = JSONbig.parse(veryBigDecimal)
console.log(`JSONbig result: ${jsonBigResult.toString()}`)
} catch (e) {
console.log(`JSONbig error thrown: ${e.message}`)
}
try {
let jsonResult = JSON.parse(veryBigDecimal)
console.log(`JSON result: ${jsonResult.toString()}`)
} catch (e) {
console.log(`JSON error thrown: ${e.message}`)
}