Variable Präzision in d3.format
Ich bin mit d3.format("s") mit d3.svg.Achse.tickFormat hübsch format der hilfsstrichbeschriftungen mit SI-Einheit (aus dem Internationalen System der Einheiten). Es funktioniert wunderbar für den größten Teil, außer für gewisse Werte, die in einen Rundungsfehler und bringen Sie eine Tonne von Dezimalstellen (1400, zum Beispiel als 1400 * 0.001 = 1.4000000000000001).
Dies zu umgehen, kann ich angeben, a Präzision, wie d3.format(".2s"), aber diese Kräfte 2 signifikanten stellen in Fällen, in denen 1 wäre besser. Zum Beispiel, wenn ich Zecken [5000, 10000, 15000] ich würde jetzt sehen, [5.0 k, 10k, 15k]. Ursprünglich, wenn ich es nicht angeben Präzision auf alles, was ich habe [5k, 10k, 15k].
Frage ich mich, ob es möglich ist, geben Sie eine maximale Präzision, so dass es nur angewendet werden, wenn die Anzahl der signifikanten Ziffern über die Anzahl angegeben? So 5000 wäre 5k und nicht 5.0 k.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun, indem Sie eine if/else-Anweisung in eine anonyme Funktion, wo würden Sie die Ausgabe der text-string. Innerhalb dieser if/else, als Sie befriedigen kann jedem Zustand, die Sie möchten, und erstellen Sie eine Funktion, die analysiert, Ihr Wert. Hier ist ein Beispiel:
Hoffe, das hilft.
Während 1400 * .001 ist 1.4000000000000001, 1400 /1000 1,4; multipliziert eine ganze Zahl durch eine negative Potenz von zehn (wie .001) führen können Rundungsfehler, aber es scheint, dass wenn eine ganze Zahl durch eine Potenz von zehn (wie 1000) nicht. Oder zumindest, es ist weniger wahrscheinlich? Ich habe implementiert eine vorläufige fix in das Update-si-format-Runden die Filiale. Es ist streng rückwärts-inkompatible, aber da die
d3.formatPrefix
Funktion ist Undokumentiert, ich denke, es wäre sicher in der nächsten patch-release.Edit: Dieses Update wurde veröffentlicht in der version 2.9.2.