Почему мой float хранит в MYSQL как .9999, когда он больше 1?

Я сохраняю время процесса в базе данных MySQL как float (4,4).

$start_time = microtime( TRUE ); // things happen in my script $end_time = microtime( TRUE ); $process_time = $end_time - $start_time; // insert $process time into mysql table 

$ process_time всегда отображается корректно, если выводится в командной строке, но если оно больше 1, оно хранится в mysql как .9999.

Что дает?

float (4,4) означает всего 4 цифры, 4 из них после десятичной точки. Таким образом, вам нужно перейти на 10,4, например

MySQL допускает нестандартный синтаксис: FLOAT (M, D) или REAL (M, D) или DOUBLE PRECISION (M, D). Здесь «(M, D)» означает, что значения могут быть сохранены с суммой до M цифр, из которых D цифр могут быть после десятичной точки.

На странице « Численные типы MySQL» :

MySQL допускает нестандартный синтаксис: FLOAT (M, D) или REAL (M, D) или DOUBLE PRECISION (M, D). Здесь «(M, D)» означает, что значения могут быть сохранены с суммой до M цифр, из которых D цифр могут быть после десятичной точки. Например, столбец, определенный как FLOAT (7,4), будет отображаться как -999.9999 при отображении. MySQL выполняет округление при сохранении значений, поэтому, если вы вставляете 999.00009 в столбец FLOAT (7,4), приблизительный результат равен 999.0001.

float (4,4) означает 4-значное число со всеми четырьмя цифрами справа от десятичной точки; 0.9999 – это самый большой номер, который он может удерживать.

Это из-за значений, которые вы передаете. Вы разрешаете 4 цифры после десятичной точки, но всего 4 цифры, поэтому максимум, который он может сохранить, составляет 0,9999. Измените его на float(5,4) чтобы сохранить его правильно, или увеличьте 5, если вы считаете, что вам понадобится еще большее число.

Это не является прямым ответом на ваш вопрос, но вы не должны использовать float для этого. Вопросы округления хорошо известны для поплавков . Используйте decimal если вам нужна точность.