diff --git a/docs/content/en/functions/NumFmt.md b/docs/content/en/functions/NumFmt.md index 795eaaea8..1bc07abd5 100644 --- a/docs/content/en/functions/NumFmt.md +++ b/docs/content/en/functions/NumFmt.md @@ -12,7 +12,7 @@ menu: docs: parent: "functions" toc: false -signature: ["lang.NumFmt PRECISION NUMBER [OPTIONS]"] +signature: ["lang.NumFmt PRECISION NUMBER [OPTIONS [DELIMITER]]"] workson: [] hugoversion: relatedfuncs: [] @@ -22,7 +22,9 @@ aliases: [] comments: --- -The default options value is `- . ,`. +The default options value is `- . ,`. The default delimiter within the options +value is a space. If you need to use a space as one of the options, set a +custom delimiter. Numbers greater than or equal to 5 are rounded up. For example, if precision is set to `0`, `1.5` becomes `2`, and `1.4` becomes `1`. @@ -31,5 +33,6 @@ Numbers greater than or equal to 5 are rounded up. For example, if precision is {{ lang.NumFmt 2 12345.6789 "- , ." }} → 12.345,68 {{ lang.NumFmt 0 -12345.6789 "- . ," }} → -12,346 {{ lang.NumFmt 6 -12345.6789 "- ." }} → -12345.678900 +{{ lang.NumFmt 6 -12345.6789 "-|.| " "|" }} → -1 2345.678900 {{ -98765.4321 | lang.NumFmt 2 }} → -98,765.43 ``` diff --git a/tpl/lang/lang.go b/tpl/lang/lang.go index 430b5e442..4c011b1ce 100644 --- a/tpl/lang/lang.go +++ b/tpl/lang/lang.go @@ -67,15 +67,27 @@ func (ns *Namespace) NumFmt(precision, number interface{}, options ...interface{ var neg, dec, grp string if len(options) == 0 { - // TODO(moorereason): move to site config + // defaults neg, dec, grp = "-", ".", "," } else { + delim := " " + + if len(options) == 2 { + // custom delimiter + s, err := cast.ToStringE(options[1]) + if err != nil { + return "", nil + } + + delim = s + } + s, err := cast.ToStringE(options[0]) if err != nil { return "", nil } - rs := strings.Fields(s) + rs := strings.Split(s, delim) switch len(rs) { case 0: case 1: diff --git a/tpl/lang/lang_test.go b/tpl/lang/lang_test.go index c494fd03a..aee567502 100644 --- a/tpl/lang/lang_test.go +++ b/tpl/lang/lang_test.go @@ -18,22 +18,27 @@ func TestNumFormat(t *testing.T) { prec int n float64 runes string + delim string want string }{ - {2, -12345.6789, "", "-12,345.68"}, - {2, -12345.6789, "- . ,", "-12,345.68"}, - {2, -12345.1234, "- . ,", "-12,345.12"}, + {2, -12345.6789, "", "", "-12,345.68"}, + {2, -12345.6789, "- . ,", "", "-12,345.68"}, + {2, -12345.1234, "- . ,", "", "-12,345.12"}, - {2, 12345.6789, "- . ,", "12,345.68"}, - {0, 12345.6789, "- . ,", "12,346"}, - {11, -12345.6789, "- . ,", "-12,345.67890000000"}, + {2, 12345.6789, "- . ,", "", "12,345.68"}, + {0, 12345.6789, "- . ,", "", "12,346"}, + {11, -12345.6789, "- . ,", "", "-12,345.67890000000"}, - {3, -12345.6789, "- ,", "-12345,679"}, - {6, -12345.6789, "- , .", "-12.345,678900"}, + {3, -12345.6789, "- ,", "", "-12345,679"}, + {6, -12345.6789, "- , .", "", "-12.345,678900"}, + + {3, -12345.6789, "-|,| ", "|", "-12 345,679"}, + {6, -12345.6789, "-|,| ", "|", "-12 345,678900"}, // Arabic, ar_AE - {6, -12345.6789, "‏- ٫ ٬", "‏-12٬345٫678900"}, + {6, -12345.6789, "‏- ٫ ٬", "", "‏-12٬345٫678900"}, + {6, -12345.6789, "‏-|٫| ", "|", "‏-12 345٫678900"}, } for i, c := range cases { @@ -45,7 +50,11 @@ func TestNumFormat(t *testing.T) { if len(c.runes) == 0 { s, err = ns.NumFmt(c.prec, c.n) } else { - s, err = ns.NumFmt(c.prec, c.n, c.runes) + if c.delim == "" { + s, err = ns.NumFmt(c.prec, c.n, c.runes) + } else { + s, err = ns.NumFmt(c.prec, c.n, c.runes, c.delim) + } } require.NoError(t, err, errMsg)