7

我将处理时间作为浮点数(4,4)存储在 MySQL 数据库中。

$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,它会以 .9999 的形式存储到 mysql 中。

是什么赋予了?

4

4 回答 4

17

float(4,4) 表示总共 4 位数字,其中 4 位在小数点后。所以你必须更改为 10,4 例如

MySQL 允许使用非标准语法:FLOAT(M,D) 或 REAL(M,D) 或 DOUBLE PRECISION(M,D)。这里,“(M,D)”是指总共最多可以存储M位的值,其中D位可以在小数点之后。

于 2011-11-11T09:32:37.463 回答
7

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 位数字,所有 4 位数字都在小数点右侧;0.9999 是它可以容纳的最大数字。

于 2011-11-11T09:33:43.130 回答
2

这不是您问题的直接答案,但您不应该为此使用浮点数。舍入问题以浮点数而闻名decimal如果您想要精确,请使用 a 。

于 2011-11-11T09:34:19.833 回答
2

这是因为您传入的值。您允许小数点后有 4 位数字,但总共只有 4 位数字,因此它可以存储的最大值为 0.9999。将其更改为float(5,4)以正确保存它,或者如果您认为需要更大的数字,请增加 5。

于 2011-11-11T09:34:31.973 回答