From 6a68d41409d6926bc25f2d6bebd5905de24404d1 Mon Sep 17 00:00:00 2001 From: Paul Rosenzweig <paulrosenzweig@users.noreply.github.com> Date: Tue, 28 May 2019 14:39:06 -0400 Subject: [PATCH] respect number_style=percent when using compact formatting (#10033) --- frontend/src/metabase/lib/formatting.js | 11 +++++++++-- frontend/test/metabase/lib/formatting.unit.spec.js | 13 +++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/frontend/src/metabase/lib/formatting.js b/frontend/src/metabase/lib/formatting.js index bd542a9793e..fa8baeedc6d 100644 --- a/frontend/src/metabase/lib/formatting.js +++ b/frontend/src/metabase/lib/formatting.js @@ -156,7 +156,7 @@ export function formatNumber(number: number, options: FormattingOptions = {}) { } if (options.compact) { - return formatNumberCompact(number); + return formatNumberCompact(number, options); } else if (options.number_style === "scientific") { return formatNumberScientific(number, options); } else { @@ -248,7 +248,14 @@ function formatNumberScientific( } } -function formatNumberCompact(value: number) { +function formatNumberCompact(value: number, options: FormattingOptions) { + if (options.number_style === "percent") { + return formatNumberCompactWithoutOptions(value * 100) + "%"; + } + return formatNumberCompactWithoutOptions(value); +} + +function formatNumberCompactWithoutOptions(value: number) { if (value === 0) { // 0 => 0 return "0"; diff --git a/frontend/test/metabase/lib/formatting.unit.spec.js b/frontend/test/metabase/lib/formatting.unit.spec.js index 6b9fc93ab3c..e93bbdf5843 100644 --- a/frontend/test/metabase/lib/formatting.unit.spec.js +++ b/frontend/test/metabase/lib/formatting.unit.spec.js @@ -46,6 +46,19 @@ describe("formatting", () => { expect(formatNumber(1000, { compact: true })).toEqual("1.0k"); expect(formatNumber(1111, { compact: true })).toEqual("1.1k"); }); + it("should format compact percentages", () => { + const options = { compact: true, number_style: "percent" }; + expect(formatNumber(0, options)).toEqual("0%"); + expect(formatNumber(0.001, options)).toEqual("0.1%"); + expect(formatNumber(0.0001, options)).toEqual("~ 0%"); + expect(formatNumber(0.001234, options)).toEqual("0.12%"); + expect(formatNumber(0.1, options)).toEqual("10%"); + expect(formatNumber(0.1234, options)).toEqual("12%"); + expect(formatNumber(0.019, options)).toEqual("2%"); + expect(formatNumber(0.021, options)).toEqual("2%"); + expect(formatNumber(11.11, options)).toEqual("1.1k%"); + expect(formatNumber(-0.22, options)).toEqual("-22%"); + }); }); // FIXME: failing on CI xit("should format to correct number of decimal places", () => { -- GitLab