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

Форум PHP

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

 

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

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

тема: непонятки с типом данных integer
 
 автор: Jackson   (28.05.2012 в 17:53)   письмо автору
 
 

Здравствуйте.
При обработке числового (все элементы int) массива обнаружил некоторую неточность - теряются значения 08 и 09 (все элементы массива двузначные, числа первого десятка записываются с первым нолем), хотя при значении элемента 01...07 все отрабатывает нормально.

для примера вывел массив


$q = array(01,02,03,04,05,06,07,08,09,010);
echo "<pre>";
print_r($q);
echo "</pre>";


и вот что получается
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 0
    [8] => 0
    [9] => 8
)


Подозреваю, что срабатывает переключение типа исчисления. Или что то другое? Как с ним бороться?

  Ответить  
 
 автор: confirm   (28.05.2012 в 17:58)   письмо автору
 
   для: Jackson   (28.05.2012 в 17:53)
 

Просто незначащий слева ноль отбрасывается. Работайте со строками.

  Ответить  
 
 автор: Jackson   (28.05.2012 в 18:07)   письмо автору
 
   для: confirm   (28.05.2012 в 17:58)
 

со строками тоже как то не сразу получилось - в массив то попало уже значение целочисленное и при операции обработки не получится явно преобразовать элемент в строку (ну собственно строка страла "0", что тоже не годиться). Пришлось массив шерстить и все 08, 09 менять на 8, 9...

но тут уже интересно - что за поведение?

  Ответить  
 
 автор: cheops   (28.05.2012 в 18:11)   письмо автору
 
   для: Jackson   (28.05.2012 в 18:07)
 

С 0 начинаются восьмеричные числа, т.е. 08 и 09 не существуют как числа, поэтому они приводятся к 0, а 010 - это в десятеричной системе не фига не 10, а 8.

  Ответить  
 
 автор: confirm   (28.05.2012 в 18:22)   письмо автору
 
   для: Jackson   (28.05.2012 в 18:07)
 

Извиняюсь, а я до конца (вернее невнимательно) не просмотрел вывод )
Но вам уже ответили о причине.

  Ответить  
Rambler's Top100
вверх

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