Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Автоокругление?! о_О

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: php сам округляет цифры...
Alisandres
Отправлено: 24 Сентября, 2010 - 09:36:42
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




Появилась непонятая вещь, есть цифра (в бд выглядит нормально) 1400000 при выводе я выжу 1.4E+6, аналогично 1200000 выводит 1.2E+6, но, например, цифры 2000000, 1300000 или 2200000 не трогает Не понял
Обработки данных перед выводом не производиться
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = mssql_query("SELECT * FROM table WHERE year='$get_year' ORDER BY month asc", $db_connect) or die ("$system_error". __LINE__ );
  3. while ($row = mssql_fetch_array($query))
  4. {
  5. $data = $row['data'];
  6. echo $data;
  7. };
  8.  


Хост linux debian 5, apache2, PHP Version 5.2.6-1+lenny9, бд mssql.

Куда копать комрады?!
 
 Top
Мелкий Супермодератор
Отправлено: 24 Сентября, 2010 - 17:58:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А где вы округление видите? Ничего не округляется, 1400000 = 1,4Е+6 = 1,4 * 10^6. Просто другое представление числа. Попробуйте приводить к int.


-----
PostgreSQL DBA
 
 Top
Alisandres
Отправлено: 24 Сентября, 2010 - 18:22:21
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




Пардон, некорректно выразился... вопрос в том что кто его (php то бишь) просил об этом (о другом представлении числа) и почему он ведет себя так именно на этих цифрах, а на аналогичных все нормально? И если прибавить к сбойному числу 1 то становиться все нормально...

приводить то можно, мне мне непонятна сама суть проблемы, не могу же я переписывать код за каждым числом. Может ему памяти не хватает?! Что мало вероятно...

Могу погрешить на freedts, но глюки случились совершенно не ожиданно...
 
 Top
JustUserR
Отправлено: 25 Сентября, 2010 - 12:22:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alisandres пишет:
Приводить то можно, мне мне непонятна сама суть проблемы, не могу же я переписывать код за каждым числом. Может ему памяти не хватает?! Что мало вероятно...
Вид представления числовых переменных и констант при их выводе и интерполции в строку может зависеть от настроек по умолчанию - если вы хотитет специфицироват ьдля него некоторый требуемый формат без осуществления модификации внешних настроек - то в таком случае вы можете использовать функции http://www.php.su/functions/?sprintf для сохранения значения в строку и http://www.php.su/functions/?printf для вывода в поток соответственно


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alisandres
Отправлено: 28 Сентября, 2010 - 10:17:20
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




Спасибо! Интересует
Цитата:
... от настроек по умолчанию...
, это каких? Вывыд phpinfo() могу дать.

Да, еще факт, под денвером вывод ожидаемый, значит дело в настройке php видимо? Хм

(Отредактировано автором: 28 Сентября, 2010 - 10:32:14)

 
 Top
JustUserR
Отправлено: 29 Сентября, 2010 - 00:03:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alisandres пишет:
Спасибо! Интересует ... от настроек по умолчанию..., это каких? Вывыд phpinfo() могу дать.
Пожалуйста! Искомая настройка для PHP-интерпретатора которая позволяет задавать форму представления чисел по умочанию должна относиться к категориями строковых операций - дело в том что при использовании переменной содержащей числовое значение в качестве операнда для вывода осуществляется ее явная или неявная интерполяция
Если вы осуществляете работы исключительно с целыми числами в заданном небольшом диапазоне - то в таком случае возможно применение директивы precision с указание соответствующего ограничивающего значения точности Тем не менее в общем случае более унифицированным вариантом является обработка автоматической интерполяции числовой переменной и вызов для нее собственного обработчика функции sprintf - такая функциональность может быть реализована модулем типа runkit


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alisandres
Отправлено: 04 Октября, 2010 - 07:53:28
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




JustUserR благодярю за ответ, очень четкий и понятный Поклон

в phpinfo() нашел параметр precision 12 12, изменил значение на 18, еще половина цифр перестала показывать Не понял , уменьшение ни к чему не привели...
Еще нашел serialize_precision = 100, но его изменения ни к чему не привели...
phpinfo()
Спойлер (Отобразить)


я в некотором недоумении... Хм число 1200000 или 1400000 совсем на дробь не похоже (precision Количество значащих цифр, отображаемых для десятичных дробей как я прочел), тот же параметр precision на windwos машине равен 12 и корректно все работает... может дело в freedts?

(Отредактировано автором: 04 Октября, 2010 - 08:02:01)

 
 Top
JustUserR
Отправлено: 04 Октября, 2010 - 23:09:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alisandres пишет:
JustUserR благодярю за ответ, очень четкий и понятный
На здоровье! При использовании различных вариативных сборок интерпретатора PHP содержащего в себе включенные дополнительные библиотеки - возможна ситуация когда определенные интегрированные в API функции обеспечивают неправильное представление информации уровня PHP-скрипта - тем не менее в вашем случае получить требуемое решение возможно при использовании различных схем - в частности возможно применить схему предварительной обработки выводного текста sprintf а также sandbox-ирующую интерптерацию в библиотеке runkit


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alisandres
Отправлено: 07 Октября, 2010 - 09:09:49
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




В моем случае на что мне нужно обратить внимание что бы исправить проблему? Не переписывать же скрипт?
 
 Top
JustUserR
Отправлено: 08 Октября, 2010 - 14:23:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alisandres пишет:
В моем случае на что мне нужно обратить внимание что бы исправить проблему? Не переписывать же скрипт?
Существует несколько различных схем обеспечивающих решения вашего вопроса - с форматированным выводом числовых переменных без полной модификации PHP-скрипта Наиболее простым методом является применении функции sprintf с указанием требуемой точности выводимых - тем не менее в случае если исходных PHP-скрипт включает достаточный объем кода то его обрботка соответствующим образом является достаточно ресурсоемкой Таким образом можно использование автоматизационной схемы - вы осуществляете поиск всех вхождений функций типа echo и print и производите добавления вызовов специальных функций до и после каждого выржения такого типа - данные функции обеспечивают просмотр всех доступных переменных из контекста и определяют среди них те которые являются целочисленными элементами и производит их конвертацию в строку явным методом printf - после окончания операции вывода на экран приводит модифицированные переменные в прежний вид


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alisandres
Отправлено: 31 Марта, 2011 - 10:23:27
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




Поднимаю тему опять.
Данные хранятся в MSSQL в поле с типом numeric(20,0)? то есть это точные(целые числа) числа (Integer) (инфо), ставил и бигинт

вывожу var_dump и офигеваю [3]=> float(1.4E+6) Не понял, получается в процессе данные сами (или по какойто строчке конфига php) менят свой тип?
(Добавление)
Случайно наткнулся Огорчение http://bugs.php.net/bug.php?id=26643
 
 Top
JustUserR
Отправлено: 31 Марта, 2011 - 20:25:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alisandres пишет:
Получается в процессе данные сами (или по какойто строчке конфига php) менят свой тип?
В качестве возможной причины осуществления возникновения предполагаемого аспекта фунционирования PHP-приложеня, допустимо рассмотрения дифференциации локального числового информационного поля в избранных базовых элементоных уровня трактования, размещение которого производится в области целевого исполняеого потока PHP-приложения и соответственного хранлища информационных полей в базе данных; дело заключается в том, что в процессе осуществления передачи сопоставляемых инкапсулированных объектов данных, производится автоматическое преобразовательное действие в виде повышения уровня ассоцированного базового уровня элементного трактования, на основании которого сохранение оригинального связанного типа данных не обеспечивается, в силу осуществления факта которого требуется проведение явного дополнительного последующего опрееленного преобразования классифицированного типа информационного поля


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alisandres
Отправлено: 31 Марта, 2011 - 20:31:52
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




Это баг... Огорчение
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB