仅当数字有小数位时,才将数字格式化为2位小数

时间:2017-01-28 13:37:52

标签: javascript d3.js

我希望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

3 个答案:

答案 0 :(得分:4)

  

我希望它能够使用一个单一的格式函数

嗯,这是不可能的。 D3格式函数不能适应到您传递给它们的数字。

但是,您可以使用两个格式函数,并测试一下您传递的数字是否有小数位。这是一种可能的测试方法:

number % 1

对于整数返回0。

然后,在ternary operator中,您可以选择要使用的d3.format功能:

!(number % 1) ? someFormat(number) : otherFormat(number)

这是一个演示:

var formatInteger = d3.format(",");
var formatDecimal = d3.format(",.2f");

var number1 = 10101;
var number2 = 12334.2;

function format(number){
return !(number % 1) ? formatInteger(number) : formatDecimal(number)
}

console.log(format(number1))
console.log(format(number2))
<script src="https://d3js.org/d3.v4.min.js"></script>

答案 1 :(得分:0)

如果使用'〜'删除任何尾随零,则可以得到的最接近值。因此,在您的情况下,格式为',.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>

有关d3格式的更多信息,请点击此处:https://observablehq.com/@d3/d3-format

答案 2 :(得分:0)

您可以尝试以下方法:


const formattedValue = value >= 100000
                ? value % 1 === 0
                  ? SI(value).replace(".0", "")
                  : SI(value)
                : value