我希望d3仅将我的数字格式化为2个小数位,前提是它具有十进制值。另外,我希望它可以使用一种单一格式的功能。
现在,我一直在使用它。有什么办法可以改善它以解决该问题?
d3.format(",.2f")(10101); //10,101.00 which must be displayed as 10,000 only
d3.format(",.2f")(12334.2); //12,334.20 this is okay
Run Code Online (Sandbox Code Playgroud)
小智 7
最接近的方法是使用“~”删除任何尾随零。因此,在您的情况下,格式为“,.2~f”。
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<script>
console.log(d3.format(",.2~f")(10101));
console.log(d3.format(",.2~f")(12334.2));
</script>Run Code Online (Sandbox Code Playgroud)
有关 d3 格式的更多信息:https ://observablehq.com/@d3/d3-format
我希望它可以使用一种单一格式的功能
好吧,那是不可能的。D3格式功能无法适应 这样传递给他们的编号。
但是,您可以有两个格式函数,并测试要传递的数字是否有小数位。这是一种可能的测试方法:
number % 1
Run Code Online (Sandbox Code Playgroud)
整数返回0。
然后,在三元运算符中,您可以选择d3.format要使用的函数:
!(number % 1) ? someFormat(number) : otherFormat(number)
Run Code Online (Sandbox Code Playgroud)
这是一个演示:
number % 1
Run Code Online (Sandbox Code Playgroud)
!(number % 1) ? someFormat(number) : otherFormat(number)
Run Code Online (Sandbox Code Playgroud)