web-dev-qa-db-fra.com

Comment convertir des millisecondes en secondes avec précision

Je veux convertir des millisecondes en secondes (par exemple, 1500 ms à 1,5 s ou 500 ms à 0,5 s) avec autant de précision que possible.

Double.parseDouble(500 / 1000 + "." + 500 % 1000); n'est pas la meilleure façon de le faire: je cherche un moyen d'obtenir le reste d'une opération de division afin que je puisse simplement ajouter le reste.

27
Keir Nellyer

Vous avez sûrement besoin de:

double seconds = milliseconds / 1000.0;

Il n'est pas nécessaire de faire manuellement les deux parties séparément - vous avez juste besoin d'une arithmétique à virgule flottante, que l'utilisation de 1000.0 (comme un double littéral) force. (Je suppose que votre valeur milliseconds est un entier d'une certaine forme.)

Notez que comme d'habitude avec double, vous ne pourrez peut-être pas représenter exactement le résultat. Pensez à utiliser BigDecimal si vous voulez représenter 100 ms comme 0,1 seconde exactement. (Étant donné qu'il s'agit d'une quantité physique et que les 100 ms ne seraient pas exacts en premier lieu, un double est probablement approprié, mais ...)

69
Jon Skeet

Pourquoi n'essayez-vous pas simplement

System.out.println(1500/1000.0);
System.out.println(500/1000.0);
5
Ankur

J'ai aussi eu ce problème, mon code n'a pas présenté les valeurs exactes mais a arrondi le nombre en secondes à 0,0 (si les millisecondes étaient inférieures à 1 seconde). Ce qui m'a aidé, c'est d'ajouter la décimale à la valeur de division.

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