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

sea*_*lJS 9 d3.js

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

可用的类型值为:

指数("e") - 使用Number.toExponential.

general("g") - 使用Number.toPrecision.

fixed("f") - 使用Number.toFixed.

整数("d") - 使用Number.toString,但忽略任何非整数值.

圆形("r") - 类似于固定,但是圆形到精确有效数字.

百分比("%") - 如固定,但乘以100,后缀加"%".

舍入百分比("p") - 如舍入,但乘以100,后缀加"%".

SI前缀("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
Run Code Online (Sandbox Code Playgroud)

Ben*_*ngt 11

你几乎做对了.使用d3.formatPrefix()一个可以获得SI前缀.为了获得没有小数的四舍五入的数字,我使用了Javascript.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
Run Code Online (Sandbox Code Playgroud)

你可以在jsfiddle自己尝试一下.

  • 知道如何在d3 v4中实现这一目标吗? (5认同)