当我在MySQL中使用float和decimal数据类型时,它有什么不同?
我什么时候应该使用哪个?
我有两个用于存储地理位置数据的字段,在我的MySQL数据库中定义为双精度数:
`address_geo_latitude` float(10,6) NOT NULL,
`address_geo_longitude` float(10,6) NOT NULL
Run Code Online (Sandbox Code Playgroud)
我正在使用Yii2的double验证器而不是用户传递的值:
public function rules()
{
return [
[['address_geo_latitude', 'address_geo_longitude'], 'double', 'min'=>0, 'max'=>360]
];
}
Run Code Online (Sandbox Code Playgroud)
(虽然我的测试似乎证明,这个问题与Yii2验证器无关)
在测试期间,我观察到值的奇怪(?)变化,即:
359.90成为359.899994(0,000006差异),359.80成为359.799988(0,000012差异),311.11成为311.109985(0,000015差异),255.55成为255.550003(-0,000003差异),205.205成为205.205002(-0,000002差异),105.105变得105.105003(-0,000003差异).但:
359.899994遗体359.899994,311.109985遗体311.109985,311遗体311,255遗体255, …您好,抱歉这个菜鸟问题,但是为什么 DECIMAL(10,9) 给我最大 9.999999999 ?10 不是小数点左边的长度吗?喜欢9999999999.999999999
像 9999999999.999999999 这样的商店号码有什么好的解决方案?双精度(9,9) 或十进制(9999999999,9) ?感谢您
Column Type Null Default Comments MIME
id int(1) No
value decimal(19,9) No
value2 decimal(10,9) No
Run Code Online (Sandbox Code Playgroud)