2012-12-11 16 views
8

szukam nad dostępnego typu dla d3.formatFormatuje liczbę SI prefiksu, ze stałą liczbą miejsc dziesiętnych

Dostępne wartości są typu:

wykładnik („e”) - użyj Number.toExponential.

ogólne ("g") - użyj opcji Number.toPrecision.

naprawiono ("f") - użyj Number.toFixed.

integer ("d") - użyj funkcji Number.toString, ale zignoruj ​​wszelkie wartości niecałkowite.

zaokrąglone ("r") - podobnie jak ustalone, ale okrągłe do dokładnych cyfr znaczących.

procent ("%") - jak ustalony, ale pomnożenie przez 100 i sufiks z "%".

zaokrąglony procent ("p") - jak zaokrąglony, ale pomnożyć przez 100 i sufiksem z "%".

Prefiks SI ("s") - podobnie jak zaokrąglone, ale z przyrostkiem jednostki, np. "9,5M" lub "1,00μ".

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

Chciałbym to SI-prefix, który jest jak ustalone, nie ma zaokrąglone taka opcja Format istnieje?

Kilka przykładów:

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 

Odpowiedz

9

Prawie miał rację. Za pomocą d3.formatPrefix() można uzyskać prefiks SI. Aby uzyskać liczbę zaokrągloną bez miejsc po przecinku, użyłem 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 

Można spróbować samemu na jsfiddle.

+4

jakiś pomysł, jak to może być dokonane w d3 v4? –

0

Wystarczy tylko zmienić

d3.format('.1s'); 

przez

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>

Powiązane problemy