Просто вопрос про str_replace - PullRequest
       7

Просто вопрос про str_replace

0 голосов
/ 11 октября 2009

У меня вопрос по поводу 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.270277777800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

print_r ($latrichting);

дают: N

print_r ($Lat);

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

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

Ответы [ 5 ]

1 голос
/ 11 октября 2009

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

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

1 голос
/ 11 октября 2009
$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];

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

0 голосов
/ 12 октября 2009

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

0 голосов
/ 11 октября 2009

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

$Latcoorl = ($latrichting == "N") ? ($Lat) : (-1 * $Lat);
0 голосов
/ 11 октября 2009

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

<?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.

...