From b16f32afcaa8749e8a395d3989bc654f3d7ed4f6 Mon Sep 17 00:00:00 2001 From: Roman Shtylman Date: Wed, 19 Apr 2023 15:22:25 -0700 Subject: [PATCH] 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 --------- Co-authored-by: Jacco van den Berg --- src/core/core.ticks.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/core.ticks.js b/src/core/core.ticks.js index eac44444af5..c0e34b11eda 100644 --- a/src/core/core.ticks.js +++ b/src/core/core.ticks.js @@ -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);