我有这个简单的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格式。)
答案 0 :(得分:3)
通过提供locale definition的thousands
属性,您只需指定组分隔符外观的内容,就像请求格式化时一样。要实际对格式化输出进行分组,您需要在提供给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;