Skip to content

Unable to parse values larger than 1.7976931348623157E+308 #25

@SebastianG77

Description

@SebastianG77

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}`)
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions