erosson/number-suffix/1.1.0

NumberSuffix

Format numbers with fancy suffixes.

Formatting

format : Config -> Float -> String

Format numbers with fancy suffixes.

format standardConfig 12345 --> "12,345"


format standardConfig 1.23e10 --> "12.3 billion"


config : Config
config = { standardConfig | getSuffix = suffixStandardShort }
format config 1.23e10 --> "12.3B"
formatInt : Config -> Int -> String

Format integers with fancy suffixes. See format.

formatSigExp : Config -> Float -> Int -> String

Format a significand and an exponent.

formatSigExp standardConfig 12.345 3 --> "12,345"


formatSigExp standardConfig 1.23 10 --> "12.3 billion"


config : Config
config = { standardConfig | getSuffix = suffixStandardShort }
formatSigExp config 1.23 10 --> "12.3B"

Configuration

type alias Config =
{ getSuffix : Int -> String
, locale : Locale
, sigfigs : Int
, suffixDivisor : Int
, minSuffix : Float
}

Configure how numbers are formatted.

getSuffix returns a suffix, given a digit count for the number. See the suffix functions below.

sigfigs is the number of significant figures shown.

Below minSuffix, a comma-separated number is shown instead of a suffixed number.

Default formatting configuration.

By default, we use standard suffixes, US locale, 3 significant figures, thousands grouping (suffixDivisor=3), and show no suffixes for values below 100,000.

Scientific notation formatting configuration.

config : Config
config = scientificConfig


format config 1.0e3 --> "1,000"
format config 1.0e6 --> "1.00e6"
format config 1.0e7 --> "1.00e7"
format config 1.0e8 --> "1.00e8"
format config 1.0e9 --> "1.00e9"
type alias Locale =
Locale

Format numbers differently based on the user's location and culture.

See cuducos/elm-format-number:FormatNumber.Locales.

This does not change the language suffixes are in, only the formatting of the numbers themselves. Consider this with a custom suffix list if you need complete internationalization.

import FormatNumber.Locales


spanishConfig : Config
spanishConfig = { standardConfig | locale = FormatNumber.Locales.spanishLocale }


format standardConfig 1234 --> "1,234"
format spanishConfig 1234 --> "1.234"

Suffix list configuration

You'll usually use one of the built-in suffix lists below, but you could write your own. Here's a modified scientific notation suffix generator:

suffixPow10 : Int -> String
suffixPow10 digits = " * 10 ^ " ++ String.fromInt digits


config : Config
config = { scientificConfig | getSuffix = suffixPow10 }


format config 1e6 --> "1.00 * 10 ^ 6"
suffixStandard : Int -> String

Standard suffixes.

config : Config
config = { standardConfig | getSuffix = suffixStandard }
-- `config = standardConfig` would work too; this is the default


format config 1e3 --> "1,000"
format config 1e5 --> "100 thousand"
format config 1e6 --> "1.00 million"
format config 1e9 --> "1.00 billion"
format config 1e12 --> "1.00 trillion"
format config 1e15 --> "1.00 quadrillion"
suffixStandardShort : Int -> String

Abbreviated standard suffixes.

config : Config
config = { standardConfig | getSuffix = suffixStandardShort }


format config 1e3 --> "1,000"
format config 1e5 --> "100K"
format config 1e6 --> "1.00M"
format config 1e9 --> "1.00B"
format config 1e12 --> "1.00T"
format config 1e15 --> "1.00Qa"
suffixEngineering : Int -> String

Engineering notation.

Unlike scientific notation, engineering notation numbers are always divisible by 3.

config : Config
config = { standardConfig | getSuffix = suffixEngineering }


format config 1e3 --> "1,000"
format config 1e5 --> "100E3"
format config 1e6 --> "1.00E6"
format config 1e7 --> "10.0E6"
format config 1e8 --> "100E6"
format config 1e9 --> "1.00E9"
suffixLongScale : Int -> String

Long-scale suffixes.

config : Config
config = { standardConfig | getSuffix = suffixLongScale }


format config 1e3 --> "1,000"
format config 1e5 --> "100 thousand"
format config 1e6 --> "1.00 million"
format config 1e9 --> "1.00 milliard"
format config 1e12 --> "1.00 billion"
format config 1e15 --> "1.00 billiard"
suffixLongScaleShort : Int -> String

Abbreviated long-scale suffixes.

config : Config
config = { standardConfig | getSuffix = suffixLongScaleShort }


format config 1e3 --> "1,000"
format config 1e5 --> "100K"
format config 1e6 --> "1.00M"
format config 1e9 --> "1.00Md"
format config 1e12 --> "1.00B"
format config 1e15 --> "1.00Bd"
suffixAlphabetic : Int -> String

Alphabetic suffixes.

config : Config
config = { standardConfig | getSuffix = suffixAlphabetic }


format config 1e3 --> "1,000"
format config 1e5 --> "100K"
format config 1e6 --> "1.00M"
format config 1e9 --> "1.00B"
format config 1e12 --> "1.00T"
format config 1e15 --> "1.00aa"
format config 1e18 --> "1.00ab"