Java PHP不支持double

Java PHP不支持double,java,php,Java,Php,我已经编写了一个函数,它用PHP和Java提供了diff输出。请帮助我获得同样的PHP输出。下面是用两种语言编写的函数 Java中的函数: public String getLat(String v_str, String strNS){ try { double lat = Integer.parseInt(v_str.substring(0, 2)); //System.out.println("lat="+lat);

我已经编写了一个函数,它用PHP和Java提供了diff输出。请帮助我获得同样的PHP输出。下面是用两种语言编写的函数

Java中的函数:

public String getLat(String v_str, String strNS){
   try
   {            
       double lat = Integer.parseInt(v_str.substring(0, 2));
       //System.out.println("lat="+lat);
       double lat2 = Float.parseFloat(v_str.substring(2));
       lat2 = lat2*10000;
       lat2 = lat2/60*10000;
       lat2 = lat2/100000000;
       //System.out.println("lat2="+lat2);
       lat += lat2;

       if(strNS.equals("S"))
            return ("-"+lat);
       else
            return (""+lat);
   }
   catch(Exception e){}

   return ("");
}
调用:
getLat(“5224.09960”,“N”)

输出:
52.4016599730428

PHP中的函数:

$deg_coord = '5224.09960';

$lat = (int)(substr($deg_coord,0,2));
$lat2 = (substr($deg_coord,2));

$lat2 = $lat2*10000;
$lat2 = $lat2/60*10000;
$lat2 = $lat2/100000000;
echo $lat += $lat2;
exit;

输出:
52.40166

由于舍入错误,您的Java答案似乎不正确。这可能是因为您使用Float而不是Double,因为Float的精度比Double要有限得多

public static void main(String[] args) {
    System.out.println(getLat("5224.09960","N"));
}

public static double getLat(String v_str, String strNS) {
    double lat = Integer.parseInt(v_str.substring(0, 2));
    double lat2 = Double.parseDouble(v_str.substring(2));
    lat += lat2 / 60;
    return strNS.equals("S") ? -lat : lat;
}
印刷品

52.40166
我怀疑使用字符串操作是不安全的,因为纬度从0开始。i、 它只适用于小数点前有4位数字的数字

此代码不假设位数。(假设您要四舍五入到小数点后6位)


如果希望在PHP中重现相同的舍入错误,可以尝试

$deg_coord = '5224.09960';

$lat = (int)(substr($deg_coord,0,2));
$lat2 = (float) (substr($deg_coord,2));

$lat2 = $lat2*10000;
$lat2 = $lat2/60*10000;
$lat2 = $lat2/100000000;
echo $lat += $lat2;
exit;

使用
Double.parseDouble(str)
代替
Double-lat=Integer.parseInt(“11.4”);双lat2=Float.parseFloat(“11.2”)
我希望在PHP man中获得相同的输出。请尝试
printf(“%.16f”,$lat)
而不是
echo
。@Jimit,PHP中的输出看起来更正确。@Jimit,IDference是两个答案都有不同的舍入错误。正确答案是52.40166。否,我希望输出与PHPY中的JAVA相同。您希望再现相同的舍入错误吗?那太疯狂了。但是,请参见我的编辑。顺便说一句,正如我注意到的,大约有一半的代码不做任何事情,也不适用于低于1000度的纬度。
$deg_coord = '5224.09960';

$lat = (int)(substr($deg_coord,0,2));
$lat2 = (float) (substr($deg_coord,2));

$lat2 = $lat2*10000;
$lat2 = $lat2/60*10000;
$lat2 = $lat2/100000000;
echo $lat += $lat2;
exit;