使用SI前缀格式化数字,并使用固定的小数位数

时间:2012-12-11 20:30:01

标签: d3.js

我正在查看d3.format的可用类型

  

可用的类型值为:

     

指数(“e”) - 使用Number.toExponential。

     

general(“g”) - 使用Number.toPrecision。

     

fixed(“f”) - 使用Number.toFixed。

     

integer(“d”) - 使用Number.toString,但忽略任何非整数值。

     

舍入(“r”) - 类似于固定,但是舍入到精确有效数字。

     

百分比(“%”) - 与固定相似,但乘以100,后缀加“%”。

     

舍入百分比(“p”) - 如舍入,但乘以100,后缀加“%”。

     

SI-prefix(“s”) - 类似于舍入,但带有一个单位后缀,例如“9.5M”或“1.00μ”。

https://github.com/mbostock/d3/wiki/Formatting#wiki-d3_format

我想要的是一个SI前缀,就像固定而非舍入一样,这样的格式选项是否存在?

一些例子:

var format = d3.format('.1s');
format(12600000); // Would like 12.6M get 10M
format(12400000); // Would like 12.4M get 10M
format(1240000); // Would like 1.2M get 1M
format(1290000); // Would like 1.3M get 1M

2 个答案:

答案 0 :(得分:11)

你几乎做对了。使用d3.formatPrefix()可以获得SI前缀。为了获得没有小数的四舍五入的数字,我使用了Javascript's .toFixed()

var prefix = d3.formatPrefix(137594020);
console.log(prefix.symbol); // "M"
console.log(prefix.scale(137594020).toFixed()); // 138

var prefix = d3.formatPrefix(13759402);
console.log(prefix.symbol); // "M"
console.log(prefix.scale(13759402).toFixed()); // 14

var prefix = d3.formatPrefix(1375);
console.log(prefix.symbol); // "k"
console.log(prefix.scale(1375).toFixed()); // 1

您可以在jsfiddle处自行尝试。

答案 1 :(得分:0)

您只需要更改

d3.format('.1s');

通过

d3.format('.3s');



console.log(d3.format(".3s")(12600000));

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
&#13;
&#13;
&#13;