【发布时间】:2019-03-12 11:33:18
【问题描述】:
我知道从度到毫秒的转换公式,反之亦然。可以这样实现:
protected function decimal_to_milisecond($dec) {
if (!empty($dec)) {
$vars = explode(".",$dec);
if (count($vars) == 2) {
$deg = $vars[0];
$tempma = "0.".$vars[1];
$tempma = $tempma * 3600;
$min = floor($tempma / 60);
$sec = $tempma - ($min*60);
return round((((($deg * 60) + $min) * 60 + $sec) * 1000));
}
else return false;
} else return false;
}
function milisecond_to_decimal($sec) {
if (!empty($sec)) {
$s = $sec / 1000;
$d = (int)($s / 3600);
$s = $s % 3600;
$m = (int)($s / 60);
$s %= 60;
$ret = substr($d+((($m*60)+($s))/3600),0);
} else return null;
return $ret;
}
场景:我将度数转换为毫秒,并继续从毫秒转换为度数。转换后的值与原始值有一定的差异。我希望该值也与原始值完全相同。例如:
$lat = "1284146";
$long = "503136198";
$lat1 = milisecond_to_decimal($lat);
$long1 = milisecond_to_decimal($long);
$result1 = decimal_to_milisecond($lat1);
$result2 = decimal_to_milisecond($long1);
var_dump($result1, $result2);
The output is float(1284000) and float(503136000)
有没有另一种方法来减少度数和毫秒之间的转换造成的差异?
【问题讨论】:
-
根据代码,表示度-分-秒。
-
@DevZer0:抱歉我更新了。
-
嗯?区别” ?您正在使用
round(),这意味着它将对您的输出进行四舍五入,从而产生“差异”。 -
@HamZa:我使用 round() 所以差异将小于或等于 0.5 毫秒。但我想将它减小到比 round() 更小。
-
@secretlm 不知道你想要什么,但是round() 有第二个参数
precision,看看吧。
标签: php floating-point geolocation rounding precision