d3格式的数字不显示千位分隔符

时间:2016-07-19 18:45:13

标签: d3.js

我有这个简单的JavaScript函数,它使用d3-format将字符串和货币代码转换为格式化的数字。

import * as d3Format from 'd3-format';
import d3 from 'd3';

export const toCurrency = (number, currencyCode) => {
    const formatDef = {
    "decimal": ".",
    "thousands": ",",
    "grouping": [3],
    "currency": [convertCodeToSymbol(currencyCode), ""]};
    const locale = d3Format.formatLocale(formatDef);
    return locale.format("($.2f")(number);
};

const convertCodeToSymbol = (currencyCode) => {
    const conversions = {
        "USD": "$",
        "EUR": "€",
        "GBP": "£"
    };
    return conversions[currencyCode] ? conversions[currencyCode] : currencyCode;
};

它的工作原理除了千位分隔符,它没有显示。鉴于(1999年,“美元”),它将返回“1999.00美元”。我已经仔细检查了文档,但千位和分组属性看起来都是正确的。我想获得“$ 1,999.00”。

(注意,导入d3行不是必需的,但我包含它只是为了确保我没有遗漏库的一部分。我已经用npm安装了d3和d3格式。)

1 个答案:

答案 0 :(得分:3)

通过提供locale definitionthousands属性,您只需指定组分隔符外观的内容,就像请求格式化时一样。要实际对格式化输出进行分组,您需要在提供给locale.format(specifier)的说明符字符串中包含逗号(,)选项:

  

逗号(,)选项可以使用组分隔符,例如数千个逗号。

对于您的代码,这意味着将说明符字符串更改为

return locale.format("($,.2f")(number);

应该这样做。

这个工作示例显示了不同之处:



console.log(d3.format(".2f")(1999));   // 1999.00
console.log(d3.format(",.2f")(1999));  // 1,999.00

<script src="https://d3js.org/d3.v4.js"></script>
&#13;
&#13;
&#13;