2012-12-22 3 views
2

이것은이 주제에 대한 두 번째 게시물입니다. 나는이 주제에 관한 수십 개의 게시물을 발견했으며 작동하는 하나의 솔루션이 아닙니다. 위치 수신기는 3.734567E7과 같은 위도를 제공합니다. 저의 목표는 위도의 정확도를 소수점 네 자리까지 줄이는 것입니다. 잘라내거나 반올림해도 상관 없습니다. 이 처리의 3.734567E7 3.734567E7위도를 소수점 이하 4 자리로 줄이는 방법

아무도 어떤 수에 영향을주지 않습니다 다음 코드는 ...

Double d = Double.parseDouble("3.734567E7"); 
    NumberFormat fmtr = new DecimalFormat("###.####");  
    String f = fmtr.format(d); 
    Log.w(getClass().getName(), "result using DecimalFormat =  " + f); 
    d = (double) Math.round(d * 10000.0)/10000.0; 
    Log.w(getClass().getName(), "result using math round =  " + d); 
    f = d.toString(); 
    Log.w(getClass().getName(), "result string using math round = " + f); 

세 가지 라인을 생산하고 있습니다.

내 윈도우 폰 응용 프로그램에서 C#으로이 일을했을 때 내가했던 다음 ...

myExecution.latitude = Math.Round (newLatitude, 4); 그것은 내 시간의 1 분 미만 걸렸다. 나는 자바에서 같은 일을하는 법을 알아 내려고 노력하는 데 수 주일이 걸렸다. Java math.round, oddley만큼, 소수점 이하 자릿수를 지정할 수있는 방법이 없습니다. 이해할 수있는만큼 완전히 쓸모 없게 만듭니다.

과학 표기법은 값을 표시하는 방법 일 뿐이며 금액이 내부적으로 저장되는 방법과 관련이 없음을 알고 있습니다. 이것은이 문제를 더욱 복잡하게 만든다.

위의 코드를 수정하여 소수점 이하 4 자리로 만들 수 있습니까?

(하지만 당신은 코드의 1 라인을 변경할 수 없습니다. 그것은 과학적 표기법으로 지정해야합니다. 당신이 그것을 훌륭하게 작동하는 10 진법을 지정합니다. 감사, 게리을

+0

몇 가지 답변을 몇 가지 방법을 표시합니다. –

+0

'onLocationChanged()'코드를 게시하여 왜 그렇게 큰 숫자를 얻었는지 알 수 있습니다 ...'Location # getLatitude()'는 -180과 180 사이의 _usable_ double을 반환해야합니다. – Sam

답변

5

3.734567E7 의미는 3.734567 × 10 .. 37345670입니다 7 반올림 할 소수가없는 그래서 당신이 3.734600E7을 원한다면 ...

, 당신은 Math.round(d/1000) * 1000)을 사용할 수 있습니다

+2

정말로 [이 모든 것 다시] (http://stackoverflow.com/a/13943358/1438733)? 오, 그럼 .. +1 해줘. :) – Eric

1

한 가지 간단한 방법 :

,
System.out.println(String.format("%.4f", 1.23456789)); 

출력 :

1.2346 (or 1,2346 depending on your locale) 

업데이트 :에 StackOverflow에서 여기에이로 반올림

+0

"."이 항상 필요하면 Locale.ROOT를 지정하십시오. 대신 그는 ","로케일에 따라. 예 : String.format (Locale.ROOT, "% .4f", 1.23456789)는 영국이나 스페인에서 항상 1.2346을 반환합니다. – Ton

관련 문제