diff --git a/src/utils/formatting-helpers.js b/src/utils/formatting-helpers.js index f69e505ac..c2f975bf8 100644 --- a/src/utils/formatting-helpers.js +++ b/src/utils/formatting-helpers.js @@ -5,12 +5,12 @@ import moment from "moment" const NUMBER_LENGTH = 4 const numFormat = d => { - if (d < 1000) { + const abs = Math.abs(d) + if (abs < 1000) { return d3.format(",.2f")(d) - } else if (d < 1000000) { - return d3.format(",.2s")(d) } else { - return `${d3.format(",.0f")(Math.round(d / 1000000))}B` + const formatted = d3.format(",.2s")(d) + return formatted.replace("G", "B") } } @@ -33,9 +33,9 @@ export const isArrayOfObjects = value => export const normalizeArrayByValue = collection => isArrayOfObjects(collection) ? collection.map(data => data.value) : collection -export function formatDataValue(data) { +export function formatDataValue(data, numAbbr) { if (typeof data === "number") { - return formatNumber(data) + return formatNumber(data, numAbbr) } else if (Array.isArray(data)) { return formatArrayValue(data) } else if (data instanceof Date) { @@ -56,14 +56,16 @@ export function maybeFormatInfinity(data) { }) } -export function formatNumber(d) { +export function formatNumber(d, abbr) { if (typeof d !== "number") { return d } const isLong = String(d).length > NUMBER_LENGTH const formattedHasAlpha = numFormat(d).match(/[a-z]/i) const isLargeNumber = isLong && formattedHasAlpha - return isLargeNumber ? numFormat(d) : commafy(parseFloat(d.toFixed(2))) + return isLargeNumber && abbr + ? numFormat(d) + : commafy(parseFloat(d.toFixed(2))) } export function formatArrayValue(data) { diff --git a/src/utils/formatting-helpers.unit.spec.js b/src/utils/formatting-helpers.unit.spec.js index 65ca840bd..e54b05551 100644 --- a/src/utils/formatting-helpers.unit.spec.js +++ b/src/utils/formatting-helpers.unit.spec.js @@ -44,8 +44,8 @@ describe("Formatting Helpers", () => { }) }) describe("formatNumber", () => { - it("should add commas to large numbers", () => { - expect(Helpers.formatNumber(10000000000)).to.equal("10,000B") + it("should format large numbers as SI", () => { + expect(Helpers.formatNumber(10000000000)).to.equal("10B") }) it("should round decimenals", () => { expect(Helpers.formatNumber(3.33333)).to.equal("3.33") @@ -53,7 +53,7 @@ describe("Formatting Helpers", () => { }) describe("formatValue", () => { it("should format large numbers", () => { - expect(Helpers.formatDataValue(10000000000000)).to.equal("10,000,000B") + expect(Helpers.formatDataValue(10000000000000)).to.equal("10T") }) it("should format dates", () => { expect(Helpers.formatDataValue(new Date(Date.UTC(2001, 0, 1)))).to.equal(