Cross-platform foundation for the number formatters. | (ns metabase.util.formatting.internal.numbers-core (:require [metabase.util.currency :as currency])) |
Options ======================================================================================================== | (defn- default-decimal-places [{:keys [currency number-style]}] (if (and currency (= number-style "currency")) (let [places (-> currency keyword (@currency/currency-map) :decimal_digits)] {:minimum-fraction-digits places :maximum-fraction-digits places}) {:maximum-fraction-digits 2})) |
Transforms input options with defaults and other adjustments.
Defaults:
- Adjustments: - :decimals is dropped, and both min and max fraction-digits are set to that value. | (defn prep-options [options] (letfn [(expand-decimals [opts] (-> opts (dissoc :decimals) (assoc :maximum-fraction-digits (:decimals options) :minimum-fraction-digits (:decimals options))))] (cond-> (merge (default-decimal-places options) options) (:decimals options) expand-decimals))) |
A Unicode non-breaking space character. | (def non-breaking-space \u00a0) |
Formatter abstraction ========================================================================================== | (defprotocol NumberFormatter (format-number-basic [this number] "Returns a String that represents the number in this format.") (split-exponent [this formatted] "Given a scientific notation string, split it at the locale-dependent exponent. Returns a map `{:mantissa \"123\" :exponent \"+4\"}`.") (wrap-currency [this text] "Given an opaque string, wraps it with the currency prefix/suffix for this locale.")) |