2012-12-30 12 views
22

Voglio convertire i millisecondi in secondi (ad esempio da 1500ms a 1.5s, o da 500ms a 0.5s) con la massima precisione possibile.Come convertire millisecondi in secondi con precisione

Double.parseDouble(500/1000 + "." + 500 % 1000); non è il modo migliore per farlo: sto cercando un modo per ottenere il resto da un'operazione di divisione in modo da poter semplicemente aggiungere il resto su.

risposta

59

Sicuramente solo bisogno:

double seconds = milliseconds/1000.0; 

Non c'è bisogno di fare manualmente le due parti separatamente - basta l'aritmetica in virgola mobile, che l'uso di 1000.0 (come double letterale) forze. (Suppongo che il tuo valore milliseconds sia un numero intero di un modulo.)

Nota che come al solito con double, potresti non essere in grado di rappresentare esattamente il risultato. Considerare l'utilizzo di BigDecimal se si desidera rappresentare 100 ms come 0,1 secondi esattamente. (Dato che si tratta di una quantità fisica, e le 100ms non sarebbe esatto, in primo luogo, un double è probabilmente opportuno, ma ...)

+0

Se si utilizza un 'int/1000.0' non si vedrà l'errore di rappresentazione se si riconverte in una stringa, sarà nel margine che corregge. –

+0

Grazie, non ho mai saputo che fosse così semplice! –

+0

È una questione di stile, ma personalmente preferisco '1000D' a' 1000.0', perché rende ancora più chiaro che è un doppio letterale e non ha un '.0' alla fine, il che mi dà davvero OCD. – bcsb1001

5

Perché non semplicemente di provare

System.out.println(1500/1000.0); 
System.out.println(500/1000.0); 
+0

Grazie, avrei scelto questa come la migliore risposta, ma quella di Jon era leggermente più dettagliata –

1

Ho avuto anche questo problema, in qualche modo il mio codice non presentava i valori esatti ma arrotondava il numero in secondi a 0,0 (se i millisecondi erano inferiori a 1 secondo). Ciò che mi ha aiutato è l'aggiunta del decimale al valore della divisione.

double time_seconds = time_milliseconds/1000.0; // add the decimal 
System.out.println(time_milliseconds);    // Now this should give you the right value. 
Problemi correlati