2013-10-15 2 views
1
public static void main(String[] args) throws InterruptedException{ 
    long sTime = new Date().getTime(); 
    Thread.sleep(3234); 
    long eTime = new Date().getTime(); 
    float diff = ((eTime-sTime)/1000); 
    System.out.println(diff); 
} 

В приведенном выше коде я ожидаю, что выход будет 3.234, но это 3.0. Я хочу точную разницу между двумя раз в секунды, с дробной частью.Как получить разницу в дате как число с плавающей запятой с точностью до миллисекунды

+0

длинный (INT) разделение. Если вы хотите больше точности использовать nanoTime() –

+2

Не то, чтобы 'sleep' * не * гарантированно спал точно за время, которое вы ему даете, поэтому даже когда вы исправляете свою программу, вы обнаружите, что она не выводит 3.234. Вероятно, он будет более грубым, чем миллисекунды, и иногда продолжительность будет заметно дольше. – Raedwald

+0

Обратите внимание, что использование 'float' или даже' double' несовместимо с вашим требованием для точной разницы_ из-за [точности] (http://en.wikipedia.org/wiki/Double-precision_floating-point_format) или плавающего номера точек. Вы можете захотеть использовать «BigDecimal». –

ответ

6

Вы выполняете интегральное деление вместо числа с плавающей точкой. Попробуйте это:

float diff = ((float)(eTime-sTime)/1000.0); 

Как вы используете long с, я также предлагаю вам использовать double тип данных для большей точности:

double diff = ((double)(eTime-sTime)/1000.0); 
2
double sTime = new Date().getTime(); 
    Thread.sleep(3234); 
    double eTime = new Date().getTime(); 
    double diff = ((eTime-sTime)/1000); 
    System.out.println(diff); 
+0

всегда медленно! – kai

Смежные вопросы