Ho letto i valori di data/ora dalle letture del sensore, ma poiché sono forniti in nanosecondi, ho pensato di scriverli per raddoppiare e effettuare la conversione. Il numero risultante è un valore di 17 cifre, più il separatore.Formattazione Double per stampare senza notazione scientifica utilizzando DecimalFormat
Provare a stamparlo direttamente comporta una notazione scientifica, che non desidero, quindi uso una classe DecimalFormat per produrla con un valore previsto di 4 cifre decimali. Il problema è, anche se il debugger mostra un numero di 17 cifre decimali, anche dopo la chiamata 'doubleValue()', la stringa di output mi mostra un numero di 15 cifre.
Codice:
...
Double timestamp = (new Date().getTime()) + // Example: 1.3552299670232847E12
((event.timestamp - System.nanoTime())/1000000D);
DecimalFormat dfmt = new DecimalFormat("#.####");
switch(event.sensor.getType()){
case Sensor.TYPE_LINEAR_ACCELERATION:
case Sensor.TYPE_ACCELEROMETER:
accel = event.values.clone();
String line = "A" + LOGSEPARATOR +
dfmt.format(timestamp.doubleValue()) + // Prints: 1355229967023.28
...
ho pensato che questo potrebbe essere un problema di precisione Android, ma il debugger ha il formattatore che mostra la precisione sbagliato pure. Ho provato questo in un programma java locale e entrambe le chiamate hanno la stessa quantità di cifre.
È un bug/limitazione DecimalFormat? O sto facendo qualcosa di sbagliato?
Il tuo problema è che il numero non rientra nel formato. Provare "##############.####". –
Anch'io ci ho provato, ma ho controllato comunque nel caso l'avessi dimenticato. Un formato "####################. ####" (con 7 cifre in più) valorizza lo stesso risultato. – ravemir
Stai utilizzando la versione java.util di DecimalFormat o di Android? –