数据类型为value float(5,2)
Inserted value
7.80
78.00
我在模态中的查询
$checkValue = static::find()->where(['value' => $this->value])->one();
如果我通过$this->value
等于78.00或78.000,则返回正确的结果。
但如果我通过7.80或7.8则返回0行。为什么呢?
答案 0 :(得分:0)
我怀疑内部mysql会将7.8
视为7.800000000001
,因此如果您与固定值进行比较,则无法获得结果。
您可能遇到过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。
由于浮点值是近似值而未存储为精确值,因此尝试在比较中将其视为精确值可能会导致问题。它们还受平台或实现依赖性的影响。有关更多信息,请参阅第B.5.4.8, “Problems with Floating-Point Values”部分
为了获得最大的可移植性,需要存储近似数值数据值的代码应使用FLOAT或DOUBLE PRECISION,不能指定精度或位数。
对于大多数应用程序,您可以安全地使用fixed point type
基本上使用decimal(5,2)
代替float(5,2)
,确保显示的任何值都是内部存储的确切值
当适用的舍入发生在插入时,"圆形上半部分"规则达到您指定的精度,并且更直观,易于管理
答案 1 :(得分:0)
我使用double数据类型
解决了这个问题value double(5,2)