Check for isNaN before building number formatter options (#11238)

* Check for isNaN before building number formatter options

When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits will make the number formatter throw. Instead we check for isNaN and use a fallback value so the formatter does not throw.

* Update src/core/core.ticks.js

Co-authored-by: Jacco van den Berg <jaccoberg2281@gmail.com>

---------

Co-authored-by: Jacco van den Berg <jaccoberg2281@gmail.com>
This commit is contained in:
Roman Shtylman 2023-04-19 15:22:25 -07:00 committed by GitHub
parent b34e273880
commit b16f32afca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -45,7 +45,13 @@ const formatters = {
}
const logDelta = log10(Math.abs(delta));
const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0); // toFixed has a max of 20 decimal places
// When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in
// infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits
// will make the number formatter throw. So instead we check for isNaN and use a fallback value.
//
// toFixed has a max of 20 decimal places
const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};
Object.assign(options, this.options.ticks.format);