You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中FLOAT类型无4字节精度?存储值与预期不符原因探究

关于MySQL FLOAT类型存储精度的疑问

测试SQL代码

CREATE DATABASE float_test;
USE float_test;
CREATE TABLE float_table (float_field FLOAT);
INSERT INTO float_table VALUES (21666.66);
SELECT * FROM float_table;
DROP DATABASE float_test;

问题描述

执行上述SQL后,查询结果显示为21666.7,但按IEEE754标准,4字节FLOAT本应能更精确地存储21666.66。请问这是什么原因?MySQL是否未按标准处理FLOAT类型?


原因解析

  • MySQL的FLOAT类型完全遵循IEEE754标准,问题出在显示精度而非存储精度。21666.66对应的IEEE754单精度浮点实际存储值是21666.6591796875,这个值被正确存在了数据库中。
  • 默认情况下,MySQL对FLOAT类型的查询结果仅显示6位有效数字,所以实际存储的21666.6591796875会被四舍五入为21666.7展示。
  • 可以通过以下方式查看真实存储值:
    • 使用格式化函数:
      SELECT FORMAT(float_field, 10) FROM float_table;
      
      执行后会输出21666.6591796875,即实际存储的精确值。
    • 通过计算强制显示更多小数位:
      SELECT float_field + 0.0000000000 FROM float_table;
      

总结

MySQL严格按照IEEE754标准存储FLOAT数据,默认显示精度的限制才导致你看到了四舍五入后的结果,并非存储本身不精确。


内容的提问来源于stack exchange,提问作者Arcus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:08:13