2012-12-11 23 views
8

我期待在可用的類型d3.format格式的數字與SI前綴,有固定的小數位數

的可用類型的值有:

指數(「E」) - 使用Number.toExponential。

一般( 「G」) - 使用Number.toPrecision。

固定(「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 

回答

9

你幾乎是正確的。使用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自己嘗試一下。

+4

任何想法如何,這可能在D3 V4來實現改變? –

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>