Skip to content

Commit 0fccfde

Browse files
JoshuaKGoldbergCursor
authored andcommitted
fix(logs): don't render numbers with >13 digits using commas (#112354)
Extracts a `formatNumber` helper for the numeric field renderer. It bypasses `formatFloat` for numbers that have over 13 digits. Tangentially related: * #110360 * #110858 Fixes EXP-866. Co-authored-by: Cursor <noreply@cursor.com>
1 parent b283089 commit 0fccfde

File tree

3 files changed

+47
-15
lines changed

3 files changed

+47
-15
lines changed

static/app/utils/discover/fieldRenderers.tsx

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ import {getShortEventId} from 'sentry/utils/events';
5151
import {formatRate} from 'sentry/utils/formatters';
5252
import {getDynamicText} from 'sentry/utils/getDynamicText';
5353
import {formatApdex} from 'sentry/utils/number/formatApdex';
54-
import {formatFloat} from 'sentry/utils/number/formatFloat';
54+
import {formatNumber} from 'sentry/utils/number/formatNumber';
5555
import {formatPercentage} from 'sentry/utils/number/formatPercentage';
5656
import {toPercent} from 'sentry/utils/number/toPercent';
5757
import {generateProfileFlamechartRouteWithQuery} from 'sentry/utils/profiling/routes';
@@ -63,10 +63,7 @@ import {
6363
findLinkedDashboardForField,
6464
getLinkedDashboardUrl,
6565
} from 'sentry/views/dashboards/utils/getLinkedDashboardUrl';
66-
import {
67-
NUMBER_MAX_FRACTION_DIGITS,
68-
NUMBER_MIN_VALUE,
69-
} from 'sentry/views/dashboards/widgets/common/settings';
66+
import {NUMBER_MIN_VALUE} from 'sentry/views/dashboards/widgets/common/settings';
7067
import {formatTooltipValue} from 'sentry/views/dashboards/widgets/timeSeriesWidget/formatters/formatTooltipValue';
7168
import {QuickContextHoverWrapper} from 'sentry/views/discover/table/quickContext/quickContextWrapper';
7269
import {ContextType} from 'sentry/views/discover/table/quickContext/utils';
@@ -319,16 +316,7 @@ export const FIELD_FORMATTERS: FieldFormatters = {
319316
</NumberContainer>
320317
);
321318
}
322-
return (
323-
<NumberContainer>
324-
{formatFloat(data[field], NUMBER_MAX_FRACTION_DIGITS).toLocaleString(
325-
undefined,
326-
{
327-
maximumFractionDigits: NUMBER_MAX_FRACTION_DIGITS,
328-
}
329-
)}
330-
</NumberContainer>
331-
);
319+
return <NumberContainer>{formatNumber(data[field])}</NumberContainer>;
332320
},
333321
},
334322
percentage: {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import {formatNumber} from 'sentry/utils/number/formatNumber';
2+
3+
describe('formatNumber()', () => {
4+
it('returns the value with commas when the value has 12 digits', () => {
5+
expect(formatNumber(123_456_789_012)).toBe('123,456,789,012');
6+
});
7+
8+
it('returns the value with commas when the value has 13 digits', () => {
9+
expect(formatNumber(1_234_567_890_123)).toBe('1,234,567,890,123');
10+
});
11+
12+
it('returns the value when the value has 14 digits', () => {
13+
expect(formatNumber(12_345_678_901_234)).toBe(12345678901234);
14+
});
15+
16+
it('returns the value when the value has 15 digits', () => {
17+
expect(formatNumber(123_456_789_012_345)).toBe(123456789012345);
18+
});
19+
20+
it('returns the value when the value does not have digits', () => {
21+
expect(formatNumber(1)).toBe('1');
22+
});
23+
24+
it('returns the value when the value has fewer digits than NUMBER_MAX_FRACTION_DIGITS', () => {
25+
expect(formatNumber(1.2345)).toBe('1.2345');
26+
});
27+
28+
it('returns a truncated value when the value has more digits than NUMBER_MAX_FRACTION_DIGITS', () => {
29+
expect(formatNumber(1.23456)).toBe('1.2345');
30+
});
31+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {NUMBER_MAX_FRACTION_DIGITS} from 'sentry/views/dashboards/widgets/common/settings';
2+
3+
import {formatFloat} from './formatFloat';
4+
5+
export function formatNumber(value: number) {
6+
if (value >= 10_000_000_000_000) {
7+
return value;
8+
}
9+
10+
return formatFloat(value, NUMBER_MAX_FRACTION_DIGITS).toLocaleString(undefined, {
11+
maximumFractionDigits: NUMBER_MAX_FRACTION_DIGITS,
12+
});
13+
}

0 commit comments

Comments
 (0)