Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: decimal(10,2) округляет большие числа до целых. Почему?
 
 автор: tAleks   (05.04.2007 в 18:12)   письмо автору
 
 

В раблице есть поле: decimal(10,2)
Записываю туда число: 95586897,42
Захожу в phpMyAdmin, а там: 95586897,00

Почему? И как с этим бороться?

   
 
 автор: tAleks   (05.04.2007 в 18:28)   письмо автору
 
   для: tAleks   (05.04.2007 в 18:12)
 

Разобрался почему.
Видимо потому что у меня в конфиге стоит локаль:

setlocale(LC_ALL, "ru_RU.cp1251", "Russian_Russia.1251");


И в запрос передается число с запятой, а не с точной. А Мускула надо с точкой.

Как быть? Не обрабатывать же все float переменные str_replace()'ом .....

   
 
 автор: Trianon   (05.04.2007 в 18:31)   письмо автору
 
   для: tAleks   (05.04.2007 в 18:12)
 

локаль php имеет слабое отношение к MySQL.
MySQL в любом случае будет выдавать наружу и ожидать на входе точки, а не запятые.

Смотря откуда идет ввод... Если, например, из числовых полей excel - то после всех проверок - именно str_replace-ом.

   
 
 автор: tAleks   (05.04.2007 в 18:41)   письмо автору
 
   для: Trianon   (05.04.2007 в 18:31)
 

Не, у меня сейчас folat - переменные в браузер выводяться с запятой:


$num = (float)12.25;
echo $num;


Выдает: 12,25

Вот и в скрипте, я генерирую числа, произвожу подсчеты, закидываю в мускул, а они округлены.

Я сделал

echo $sql; // запроса


И у меня в запросе за место точек, запятые. Вто я и думаю, что может и в мускул они с запятыми уходят. А мускул их из-за запятых округляет.

Может такое быть?

   
 
 автор: Trianon   (05.04.2007 в 19:04)   письмо автору
 
   для: tAleks   (05.04.2007 в 18:41)
 

>И у меня в запросе за место точек, запятые. Вто я и думаю, что может и в мускул они с
>запятыми уходят. А мускул их из-за запятых округляет.
>Может такое быть?

Если Вы запрос формируете в виде ( SET a = 12,25 ) - Вы совершенно однозначно нарушаете синтаксис.
Если в таком ( SET a = '12,25' ) - прямой ошибки нет, но дальше запятой MySQL смотреть не станет.
Запятых в числах языка SQL быть не должно.

При этом SQL-серверу совершенно фиолетово, с какой целью, когда, и вообще включали ли Вы локаль.

   
 
 автор: tAleks   (05.04.2007 в 19:32)   письмо автору
 
   для: Trianon   (05.04.2007 в 19:04)
 

Ну это-то я понимаю.
Весь вопрос в том, как эти flot-локализованные переменные обрабатывать перед закидыванием в БД?
Мне только одно в голову лезент, преобразовывать их в строку, и str_replace'ом менять точку на запятую. Но ведь это, по моему, не очень эфективно....

   
 
 автор: Trianon   (05.04.2007 в 19:38)   письмо автору
 
   для: tAleks   (05.04.2007 в 19:32)
 

так и делать. в строку их так или иначе придется преобразовать. str_replace - функция достаточно шустрая.
Кстати, а sprintf - тоже запятые порождает?

   
 
 автор: tAleks   (05.04.2007 в 19:52)   письмо автору
 
   для: Trianon   (05.04.2007 в 19:38)
 

На счет sprintf не знаю, я ее вообще не доконца понимаю....

Я переделал локаль на:
setlocale(LC_CTYPE, "ru_RU.cp1251", "Russian_Russia.1251");


Как думаете, мне это в дальнейшем отрыгнется какими-нибудь проблемами?

   
 
 автор: Trianon   (05.04.2007 в 19:58)   письмо автору
 
   для: tAleks   (05.04.2007 в 19:52)
 

>На счет sprintf не знаю, я ее вообще не доконца понимаю....
Имелось в виду:

$val = 49.0/4;
$str = sprintf("%10.2f", $val); 
echo $str;

>
>Я переделал локаль на:
>
setlocale(LC_CTYPE, "ru_RU.cp1251", "Russian_Russia.1251");

>
>Как думаете, мне это в дальнейшем отрыгнется какими-нибудь проблемами?

понятия не имею. Я стараюсь не применять локалезависимых инструментов везде, где это можно.

   
 
 автор: tAleks   (05.04.2007 в 20:36)   письмо автору
 
   для: Trianon   (05.04.2007 в 19:58)
 

Да, я тоже так-то не очень хочу их применять, только без них у меня рег. выражения на хостинге отказались работать с русскими буквами....

   
 
 автор: tAleks   (05.04.2007 в 18:46)   письмо автору
 
   для: Trianon   (05.04.2007 в 18:31)
 

Отключил сейчас локаль - и все стало нормально....

НО! Касяк в том, что я не помню для чего я ее вообще включал эту локаль, но помню что для чего-то включал.... и боюсь что ее надо оставить включеной...
Но что тогда делать с запросами?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования