与K一样将长数字格式化为2个有效数字

时间:2019-06-02 08:39:02

标签: javascript d3.js

我有一些下面的数字,我想将其格式化为更简洁的长度以显示在图例上

1000000
1200
321
2
0.31243
0.011231132

如下

100K
1.2K
321
2
0.31
0.01

我已经尝试通过使用内置的d3格式函数来解决此问题

d3.format(".2s")

但是输出是

100k
1.2k
321
2
30m
100m

我认为问题在于s标识符与SI单位相关,除非数字小于1,否则它与我想要的单位一致。如何将其格式化为我期望的格式

在我使用tickFormat(d3.format(".2s"));时,我需要format函数的格式与tickFormat期望的格式相同

1 个答案:

答案 0 :(得分:1)

在我看来,您想要避免约数的SI前缀。如果正确,那么只需检查该值是否大于1即可应用格式:

[1000000, 1200, 321, 2, 0.31243, 0.011231132].forEach(d => {
  d > 1 ? console.log(d3.format(".2s")(d)) : console.log(d3.format(".2")(d))
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>