2009-10-10 7 views
0

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

$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, вы думаете?

+2

Каковы значения '$ latrichting' и' $ Lat'? –

+0

Спасибо за быстрый ответ, и вы на что-то там $ Lat заполняется $ Lat = $ latdeg + (($ latmin + ($ latsec/60))/60); математический расчет, поэтому я думаю, что мне нужно искать там, я думаю. – Plumbum7

+0

Это похоже на проблему точности чисел с плавающей запятой. –

ответ

1
$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

благодарим за быстрый ответ, WOW вы читатели работают очень быстро. Но у меня есть дополнительная информация из-за Ивана Невоструева. – Plumbum7

+0

Кто бы ни проголосовал за меня, когда я единственный человек, который не взорвал афера, и на самом деле подумал о какой-то творческой причине для ситуации, а не о том, чтобы скрыться за флагом «нужно больше информации». «Бла-бла-бла» следует рассмотреть сами трусы по всем трем пунктам. – Anthony

+0

Откуда вы получаете '$ Lat'? – Anthony

1

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

Не уверен, что он должен делать со всеми нулями, хотя.

+0

Это должен быть комментарий. – Anthony

+0

@ Энтони, это комментарий;) Точка взята, хотя. – Simon

+0

+1, чтобы компенсировать карму-удар по дате голосования. Хотя я согласен с Энтони, я не нахожу ваш ответ (или «комментарий») вредным для понимания того, что при голосовании должен подразумеваться. –

0

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

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

+0

Ваш никогда не имеет дело с поплавком, и строки не будут страдать от лишних нулей. Я считаю, что двоеточие в начале на самом деле не существует, это всего лишь опечатка в OP. «дает: что-то« против »дает: что-то» – hlpiii

+0

Принимая как истинное исходное предположение, что 'print_r ($ latdir);' дает ': N52.2702777778' Я не вижу никакой проблемы с плавающей запятой: опубликованный код работает только на строки, независимо от того, как получается $ latdir. Также без двоеточия исходный символ N предотвращает поплавок. Если мое первоначальное предположение ложно ... ну, мы разработчики, а не экстрасенсы;) – ntd

0

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

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

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