Почему мой файл с плавающей запятой хранится в MYSQL как .9999, когда он больше 1? - PullRequest
7 голосов
/ 11 ноября 2011

Я храню время процесса в базе данных 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.

Что дает?

Ответы [ 4 ]

16 голосов
/ 11 ноября 2011

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

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

7 голосов
/ 11 ноября 2011

со страницы MySQL Numeric Types :

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

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

2 голосов
/ 11 ноября 2011

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

2 голосов
/ 11 ноября 2011

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

...