I’m storing process time in a MySQL database as a 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 always displays correctly when outputted to the command line, but if it’s value is greater than 1, it stores into mysql as .9999.
float(4,4) means total 4 digits, 4 of them are after the decimal point.
So you have to change to 10,4 for example
MySQL permits a nonstandard syntax: FLOAT(M,D) or REAL(M,D) or DOUBLE PRECISION(M,D). Here, “(M,D)” means than values can be stored with up to M digits in total, of which D digits may be after the decimal point.
From the MySQL Numeric Types page:
MySQL permits a nonstandard syntax: FLOAT(M,D) or REAL(M,D) or DOUBLE
PRECISION(M,D). Here, “(M,D)” means than values can be stored with up
to M digits in total, of which D digits may be after the decimal
point. For example, a column defined as FLOAT(7,4) will look like
-999.9999 when displayed. MySQL performs rounding when storing values, so if you insert 999.00009 into a FLOAT(7,4) column, the approximate
result is 999.0001.
float(4,4) means a 4 digit number, with all 4 digits to the right of the decimal point; 0.9999 is the biggest number it can hold.
It’s because of the values you’re passing in. You’re allowing 4 digits after the decimal point, but only 4 digits in total so the maximum it can store is .9999. Change it to
float(5,4) to save it correctly, or increase the 5 if you think you’ll need an even greater number.
This isn’t directly an answer to your question, but you shouldn’t use floats for that. Rounding issues are well known for floats. Use a
decimal if you want precision.