[PHP] Проблема с float

stat5327000

Нужна помощь.
В общем не могу понять в чём проблема.
У меня в одном случае при такой записи:
------------------------------------------------------
foreach( $data as $key => $val )
{
if ( isset($val["price"]) ){
$temp = $val["price"];
print $temp." & ";
$temp = round($temp*100)/100;
print $temp."<br>";
db_query( "UPDATE ".PRODUCTS_TABLE." SET Price='$temp' ".
" WHERE productID=".$key );
}
...
------------------------------------------------------
Переменная $temp выведется сначала с точкой (при условии что $val["price"] была в записи с точкой а после вот этого $temp = round($temp*100)/100; вместо точки почему-то будет запятая.
Причём даже если просто сделать до этого $temp = (float )$temp; то тоже появляется запятая.
Но что интересно, что если на том же сайте поместить тестовый файлик вида :
<?
#phpinfo;
$v = "10.1";
$var = (float)$v;
$var = round($var*100)/100;
print "asd ".$var;
?>
То при обращении к нему выведется переменная с точкой как и была.
Кто-нибудь сталкивался с чем-то подобным?

sbs-66

Даже и не знаю, а что у тебя там с локалью?

stm7884696

поставь приведение к нужному типу перед вставкой в базу и не мучайся...

latinos

поставь приведение к нужному типу перед вставкой в базу и не мучайся...
Ммм, в том то и дело что если я делаю приведение к float то у меня приводится к виду с запятой, причём это если внутри того цикла который в одном из файлов. В тестовом файле такого не происходит.
А с запятой плохо, т.к. при вставке в MySQL обрезается дробная часть. В этом как бы проблема.

latinos

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

a10063

используй number_format
вообще, очень похоже на проблемы с локалью - лучше поставить английскую и не париться
и для тестирования нужно использовать не (float)$temp, а (string)$temp, т.к. для print осуществляется неявное преобразование в строку, а также смотреть значения в дебагере
к тому же, print $var." str" и print "str ".$var могут работать по-разному

latinos

Действительно были проблемы с локалью. Всем спасибо!

stm7884696

во избежание проблем с локалью и большей переносимости сделай перед вставкой str_replace с запятой на точку
Оставить комментарий
Имя или ник:
Комментарий: