Java 如何将纬度减少到小数点后4位
这是我关于这个主题的第二篇文章。我已经找到了几十篇关于这个主题的帖子,但没有一个解决方案是有效的。位置侦听器将为您提供一个纬度,如3.734567E7。我的目标是将纬度的精确度降低到小数点后四位。我不在乎是把它截掉还是绕过去。下面的代码Java 如何将纬度减少到小数点后4位,java,android,Java,Android,这是我关于这个主题的第二篇文章。我已经找到了几十篇关于这个主题的帖子,但没有一个解决方案是有效的。位置侦听器将为您提供一个纬度,如3.734567E7。我的目标是将纬度的精确度降低到小数点后四位。我不在乎是把它截掉还是绕过去。下面的代码 Double d = Double.parseDouble("3.734567E7"); NumberFormat fmtr = new DecimalFormat("###.####"); String f = fmtr.f
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 );
生成三行:
37345670
3.734567E7
3.734567E7
所有这些处理都不会对数字产生任何影响
当我不得不在我的windows phone应用程序上的C#中执行此操作时,我执行了以下操作
myExecution.latitude=Math.Round(新纬度,4);这花了我不到一分钟的时间。我花了一个多星期的时间试图弄明白如何在java中做同样的事情。就我所知,javamath.round无法指定要舍入多少小数位以使其完全不使用usless
我意识到,科学记数法只是用来显示数值的一种方式,与内部存储量的方式没有任何关系。这使得这个问题更加令人困惑
有人能修改上面的代码使其四舍五入到小数点后4位吗
(但您不能更改代码的第1行。它必须用科学记数法指定。如果您用十进制记数法指定它,它将非常有效。
谢谢,Gary3.734567E7表示3.734567 x 107,即37345670。因此没有小数可舍入 如果您想要3.734600E7,可以使用
Math.round(d/1000)*1000)
一种简单的方法:
System.out.println(String.format("%.4f", 1.23456789));
输出:
1.2346 (or 1,2346 depending on your locale)
更新:要在StackOverflow上显示舍入问题的几个答案,有几种方法。请发布您的
onLocationChanged()
代码,以便我了解您为什么会得到这么大的数字<代码>位置#getLatitude()应该返回一个介于-180和180之间的可用双精度。真的吗?哦,好吧+1.谢谢你打败了我如果始终需要“.”而不是“he”,则根据区域设置指定Locale.ROOT。例如:String.format(Locale.ROOT,“%.4f”,1.23456789)在英格兰或西班牙将始终返回1.2346。