如何在 5.7.0 版本的 D3.js 中制作自定义千位分隔符和小数字符

Posted

技术标签:

【中文标题】如何在 5.7.0 版本的 D3.js 中制作自定义千位分隔符和小数字符【英文标题】:How to make custom thousand separator and decimal character in D3.js in Version 5.7.0 【发布时间】:2021-05-31 13:34:06 【问题描述】:

我正在尝试在 D3.js 中添加自定义千位分隔符和十进制字符 我按照以下链接进行操作,但该解决方案适用于 3.4.11 版,但我希望将其用于 5.7.0 版: How to add a (custom) thousand separator in D3?

下面是代码:

// custom localization options
var myLocale = 
  "decimal": ",",
  "thousands": ".",
  "grouping": [3],
  "currency": ["$", ""]



// create custom locale formatter from the given locale options
const localeFormatter = d3.locale(myLocale);

const formater = ",.2f";
// create a formatter for the number (grouped thousands with two significant digits). By default ',' means 'thousands' but we switched that into a '.' in our custom localization
const numberFormat = localeFormatter.numberFormat(formater);

// test
//alert(numberFormat(10235.6789)); // "1.000.000"
//$("#number").html(numberFormat(10235.6789))
document.getElementById('number').innerHTML = numberFormat(10235.6789)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<p id="number">

</p>

【问题讨论】:

***.com/a/42068175/367865 【参考方案1】:

d3.locale 现在是 d3.formatLocale:

const localeFormatter = d3.formatLocale(myLocale);

虽然我们可以使用以下方式创建格式:

const numberFormat = localeFormatter.format(formater);

相对于localeFormatter.numberFormat(formater);

// custom localization options
var myLocale = 
  "decimal": ",",
  "thousands": ".",
  "grouping": [3],
  "currency": ["$", ""],



// create custom locale formatter from the given locale options
const localeFormatter = d3.formatLocale(myLocale);

const formater = ",.2f";
// create a formatter for the number (grouped thousands with two significant digits). By default ',' means 'thousands' but we switched that into a '.' in our custom localization
const numberFormat = localeFormatter.format(formater);

// test
//alert(numberFormat(10235.6789)); // "1.000.000"
//$("#number").html(numberFormat(10235.6789))
document.getElementById('number').innerHTML = numberFormat(10235.6789)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<p id="number">

</p>

自定义区域设置也可以像 d3.formatPrefix 一样使用,以允许使用 SI 前缀并指定应使用多少个小数点:

// custom localization options
var myLocale = 
  "decimal": ",",
  "thousands": ".",
  "grouping": [3],
  "currency": ["$", ""],



// create custom locale formatter from the given locale options
const localeFormatter = d3.formatLocale(myLocale);

// custom number format:
const numberFormat = n=>localeFormatter.formatPrefix(".2", n)(n);

// test
//alert(numberFormat(10235.6789)); // "1.000.000"
//$("#number").html(numberFormat(10235.6789))
document.getElementById('number').innerHTML = numberFormat(10010000235.6789)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<p id="number">

</p>

【讨论】:

上述代码是否也适用于自定义数字格式,如 €10.5k、€2567 万、€32.56B 等? 您需要不同的方法(自定义区域设置与否)来处理动态精度和 SI 单位,请参阅 here (您可以使用localeFormatter.formatPrefix,因为链接答案中使用了d3.formatPrefix) localeFormatter.formatPrefix 不会给出所需的输出,如 K、百万、十亿等。我检查了 Link,我可以看到 k 代表公斤,M 代表兆。这是正确的数字格式吗?也没有可用的“B”SI 前缀。 早上再看

以上是关于如何在 5.7.0 版本的 D3.js 中制作自定义千位分隔符和小数字符的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个父节点连接到一个子节点以及如何务实地为树中的每个节点制作工具提示?在 D3 js (SVG) 中

如何在d3js中沿x轴制作可滚动的轴/平移

在 d3.js 中制作弧线

D3.js 弧生成器 (V3版本)

怎么用d3.js 制作3d效果

D3.js使用过程中的常见问题(D3版本D3V4)