Вопрос

У меня есть вопрос о str_replace в PHP.Когда я делаю:

$latdir = $latrichting.$Lat;

If (preg_match("/N /", $latdir)) {
    $Latcoorl = str_replace(" N ", "+",$latdir);
}
else {
    $Latcoorl = str_replace ("S ", "-",$latdir);
}

print_r($latdir);
print_r($Latcoorl);

print_r($latdir); дает: N52.2702777778

но print_r ($Latcoorl); дает :N52.270277777800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000

Да, это добавляет много нулей.Может ли кто-нибудь объяснить такое поведение просто ради развлечения?

print_r ($latrichting);

дайте:Н

print_r ($Lat);

Это странное длинное число.

Вы думаете, это, вероятно, не команда str_replace?

Это было полезно?

Решение

$latmin2 = bcdiv($latsec, 60, 20);
$latmin_total = $latmin + $latmin2;
$lat = bcdiv($latmin_total, 60, 20);

$latdir = array("N" => 1, "S" => -1);

$latcoorl = $latdir * $latdir[$latrichting];

С Новым Годом.

Другие советы

В вашей строке поиска замены строки есть пробел перед «N», а выгруженное значение выглядит так, как будто это N:

Хотя не уверен, какое отношение это имеет ко всем нулям.

В моей системе этот фрагмент кода:

<?php
$latdir = ':N52.2702777778';

If (preg_match("/N /", $latdir)) {
    $Latcoorl = str_replace(" N ", "+",$latdir);
    }
    else {
        $Latcoorl = str_replace ("S ", "-",$latdir);
        }

print_r($latdir);
print_r($Latcoorl);
?>

дает следующий результат:

:N52.2702777778:N52.2702777778

Я предполагаю, что после этого кода у вас есть что-то, что печатает серию из 0.

Как бы я это сделал;просто вариант оригинального ответа Энтони, в котором все сохраняется в числовом виде и не переходит в строковый режим.

$Latcoorl = ($latrichting == "N") ? ($Lat) : (-1 * $Lat);

Выполненные вами строковые операции не будут генерировать 0.0 должны исходить от $lat.Что ты сделал с $lat?любое деление на число пи?PHP попытается сохранить максимально точное число с плавающей запятой в $lat.Это не проблема, это правильное поведение.Просто усеките число при отображении или округлите его в большую сторону.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top