2012-12-22 29 views
2

這是我關於此主題的第二篇文章。我在這個主題上找到了數十篇文章,而不是一個可行的解決方案。位置偵聽器將爲您提供諸如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); 

產生三行: 3.734567E7 3.734567E7

沒有該處理的對數之間的任何影響。

,當我不得不做這在C#在我的Windows手機應用程序我做了以下...

myExecution.latitude = Math.Round(newLatitude,4);我花了不到一分鐘的時間。我有一個多星期的時間試圖找出如何在java中做同樣的事情。 Java的數學運算,很奇怪,沒有辦法指定你希望繞過多少個小數位來使它完全無用,據我所知。

我意識到科學記數法只應該是一種顯示數值的方式,並且與數量如何存儲在內部沒有任何關係。這使得這個問題更令人困惑。

任何人都可以修改上面的代碼,使其四捨五入到小數點後4位?

(但你不能改變的代碼1號線,必須在科學記數法來指定。如果你在它奇妙的作品十進制形式指定。 感謝,加里

+0

幾個答案就在這裏,這樣做的幾種方法。 –

+0

請發表你的'onLocationChanged()'代碼,這樣我就能明白你爲什麼會得到這麼大的數字......'Location#getLatitude()'應該返回-180到180之間的_usable_ double。 – Sam

回答

5

3.734567E7意味着3.734567×10 。這是37345670,所以沒有小數四捨五入...

如果你想3.734600E7,您可以使用Math.round(d/1000) * 1000)

+2

真的,[this whole thing再次](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