2013-10-15 3 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'을 사용하는 것은 [precision] (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