数字格式说明符方案

时间:2012-03-20 15:55:22

标签: javascript language-agnostic string-formatting

我正在寻找数字的格式说明符方案,它具有日常无处不在的“YYYY-MM-DD”等格式说明符的特征。我正在寻找:

  1. 易于处理:格式化数字不需要花费太多精力(算法复杂性,性能)。
  2. (可选)用户友好:用户可以直观地使用此语法。
  3. 占千位分隔符和小数位。
  4. 即使我的目标域是JavaScript(即格式化Number个实例),我更喜欢标准,直观的说明符方案,而不是JavaScript本机。不,我认为printf数字格式说明符不够直观,无法呈现给用户。

    我到目前为止提出的方案是:

    #,###.##

    说:

    1. 整个部分使用以逗号分隔的 3 数字组
    2. 使用 2 小数位并使用期间作为分隔符
    3. 我对这个计划感到“惭愧”,并且在看到更好的替代品之前,不想投入太多时间来实施它。

      我还经历过的是,要使用格式说明符并实际使用具有千位/小数分隔符的不同属性的首选项对象,小数位数等,并通过向用户提供样本编号来抽象它要从中选择的输出。

      我是否应该忘记使用格式说明符方案,只使用在表示层抽象的一组属性?是否有符合我在顶部提到的3个标准的标准(ish)说明符?

      在一天结束时,我不是没有解决方案而且我已经足够让我离开了。我只是在寻找更理想的解决方案。

1 个答案:

答案 0 :(得分:1)

XSLT是一种具有comprehensive decimal-format方案的标准。

format-number(5351,"#,###.##")

ECMA-402是另一种具有数字格式API的标准:

  

可以使用具有所需语言环境标记和选项的Intl.NumberFormat构造函数构建对区域性敏感的NumberFormat对象。 NumberFormat对象的格式方法可用于根据区域设置和选项集格式化数字数据。 Number.prototype.toLocaleString也已更新为内部使用Intl.NumberFormat进行文化敏感格式化,现在支持两个可选参数 - 语言环境和选项。

var number = 1123456.789;

// request a US formatted number
console.log("United States: " + new Intl.NumberFormat('en-US').format(number));

// limit to three significant digits
console.log("3 significant digits: " + new Intl.NumberFormat('en-US', { maximumSignificantDigits: 3 }).format(number));

// request a French formatted number
console.log("France: " + new Intl.NumberFormat('fr-FR').format(number));

// request a Indian formatted number
console.log("India: " + new Intl.NumberFormat('en-IN').format(number));

更加用户友好的解决方案类似于CFML的NumberFormatDecimalFormat方案。

<强>参考