gpt4 book ai didi

java - PHP不支持 double

转载 作者:行者123 更新时间:2023-12-02 08:18:36 26 4
gpt4 key购买 nike

我写了一个函数,它在 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.40165999730428

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 开始。也就是说,它只适用于小数点前面 4 位数字的数字。

此代码不对位数做出任何假设。 (它确实假设您想要四舍五入到小数点后 6 位)

public static double getLat(String v_str, String strNS) {
double v = Double.parseDouble(v_str);
double lat = ((long) v)/100;
double lat2 = (v - lat * 100) / 60;
double lat3 = lat + lat2;
double rounded = (double)(long) (lat3 * 1000000 + 0.5) / 1000000;
return strNS.equals("S") ? -rounded : rounded;
}
<小时/>

如果你想在 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;

关于java - PHP不支持 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com