我正在查看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
答案 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;