Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将纬度减少到小数点后4位_Java_Android - Fatal编程技术网

Java 如何将纬度减少到小数点后4位

Java 如何将纬度减少到小数点后4位,java,android,Java,Android,这是我关于这个主题的第二篇文章。我已经找到了几十篇关于这个主题的帖子,但没有一个解决方案是有效的。位置侦听器将为您提供一个纬度,如3.734567E7。我的目标是将纬度的精确度降低到小数点后四位。我不在乎是把它截掉还是绕过去。下面的代码 Double d = Double.parseDouble("3.734567E7"); NumberFormat fmtr = new DecimalFormat("###.####"); String f = fmtr.f

这是我关于这个主题的第二篇文章。我已经找到了几十篇关于这个主题的帖子,但没有一个解决方案是有效的。位置侦听器将为您提供一个纬度,如3.734567E7。我的目标是将纬度的精确度降低到小数点后四位。我不在乎是把它截掉还是绕过去。下面的代码

    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行。它必须用科学记数法指定。如果您用十进制记数法指定它,它将非常有效。
谢谢,Gary

3.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。