javascript - 将长数字格式化为 K 和 2 个有效数字
问题描述
我有以下数字,我想将其格式化为更简洁的长度以显示在图例上
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"));
我需要格式函数与 tickFormat 所期望的格式相同
解决方案
在我看来,您希望避免使用 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>
推荐阅读
- python - toctree 中的菜单条目在单击时展开/折叠并且不更改页面内容?
- c++ - 如何修复 BCryptDecrypt 返回 0xC000003E (STATUS_DATA_ERROR)?
- android - AdMob 开始实施对 app-ads.txt 文件的支持
- sql - SQL 计数(最大值())
- python - 如何解决在 Windows 10 上安装 lightgbm gpu 的问题?
- r - 如何避免在ggplot的Y轴上舍入小数
- python - 如何使用 ParameterGrid 将多个列表作为输入,遍历所有组合并将结果输入到函数以测试所有选项
- ruby-on-rails - 带有 WHERE 子句的 Rails 索引操作
- linux - 从通过 WiFi 连接到同一路由器的 ESP32 查找通过 LAN 连接到路由器的设备的 IP 地址
- angular - 验证 ngfor 中的输入