Sto utilizzando d3.format ("s") con d3.svg.axis.tickFormat per formattare in modo preciso le etichette di graduazione con unità SI (dal Sistema internazionale di unità). Funziona magnificamente per la maggior parte, tranne alcuni valori che si imbattono in un errore di arrotondamento e restituiscono una tonnellata di cifre decimali (1400, ad esempio, 1400 * 0,001 = 1,4000000000000001).Precisione variabile in d3.format
Per aggirare questo, è possibile specificare una precisione, ad esempio d3.format (". 2s"), ma ciò impone 2 cifre significative nei casi in cui 1 sarebbe migliore. Ad esempio, se ho tick [5000, 10000, 15000] vedrei ora [5.0k, 10k, 15k]. Inizialmente, quando non ho specificato la precisione, ho ottenuto [5k, 10k, 15k].
Mi chiedo se è possibile specificare una precisione massima tale che verrà applicata solo quando il numero di cifre significative supera il numero specificato? Quindi 5000 sarebbero 5k e non 5,0k.
Grazie per la risposta. Sfortunatamente, sto usando l'helper d3.svg.axis in modo che i valori che sto formattando siano valori di tick, non valori di dati. La formattazione viene eseguita internamente quando vengono generate le etichette di graduazione. Potrei avvolgere la funzione restituita da d3.format nella mia funzione per intercettare i valori ma ri-analizzare la stringa restituita dal formattatore SI non sembra troppo pulita. Mi stavo chiedendo che ci potrebbe essere qualcosa di integrato nel formattatore per supportare questo senza codificarlo da solo. –
Ahh giusto. Il mio codice è per le etichette dei dati, non le etichette di graduazione. Spero di non averti guidato sulla strada sbagliata. Potresti fare qualcosa di simile, ma con le funzioni di etichettatura dei segni di graduazione (ad esempio, passargli una funzione anonima)? – tatlar