13

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

可用的类型值为:

exponent ("e") - 使用 Number.toExponential。

一般 ("g") - 使用 Number.toPrecision。

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

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

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

百分比 ("%") - 与固定相同,但乘以 100 并以 "%" 为后缀。

舍入百分比 ("p") - 类似于舍入,但乘以 100 并以 "%" 为后缀。

SI 前缀 ("s") -类似于 rounded,但带有后缀的单位,例如 "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
4

2 回答 2

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

您可以在jsfiddle自己尝试。

于 2013-02-18T18:05:32.843 回答
1

你只需要改变你的

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>

于 2016-06-22T00:17:45.127 回答