Cómo convertir milisegundos a segundos con precisión


Quiero convertir milisegundos a segundos (por ejemplo 1500ms a 1.5 s, o 500ms a 0.5 s) con la mayor precisión posible.

Double.parseDouble(500 / 1000 + "." + 500 % 1000); no es la mejor manera de hacerlo: estoy buscando una manera de obtener el resto de una operación de división para que simplemente pueda agregar el resto.

Author: eebbesen, 2012-12-30

3 answers

Seguramente solo necesitas:

double seconds = milliseconds / 1000.0;

No hay necesidad de hacer manualmente las dos partes por separado - solo necesita aritmética de coma flotante, que el uso de 1000.0 (como double literal) fuerza. (Estoy asumiendo que su valor milliseconds es un entero de alguna forma.)

Tenga en cuenta que, como es habitual con double, es posible que no pueda representar el resultado exactamente. Considere usar BigDecimal si desea representar 100 ms como 0.1 segundos exactamente. (Dado que es una cantidad física, y los 100ms no sería exacto, en primer lugar, un double es probablemente apropiado, pero...)

 63
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-30 13:00:21

¿Por qué no simplemente intenta

System.out.println(1500/1000.0);
System.out.println(500/1000.0);
 5
Author: Ankur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-30 13:01:00

También tuve este problema, de alguna manera mi código no presentó los valores exactos, sino que redondeó el número en segundos a 0.0 (si milisegundos estaba por debajo de 1 segundo). Lo que me ayudó fue agregar el decimal al valor de la división.

double time_seconds = time_milliseconds / 1000.0;   // add the decimal
System.out.println(time_milliseconds);              // Now this should give you the right value.
 2
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-08 09:22:32