V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
lafuerza
V2EX  ›  MySQL

MySQL 中有很多.10000000001 和.0999999999996 的数据

  •  
  •   lafuerza · 2020-12-01 17:32:38 +08:00 · 1637 次点击
    这是一个创建于 370 天前的主题,其中的信息可能已经有所发展或是发生改变。
    给甲方做数据清洗和治理,库中某 varchar 类型的字段中有很多类似.10000000001 和.0999999999999 的数据,本应都是.1 才对,比如:

    001.100000000000000001,应该是 1.1 ;
    005.099999999999999996,应该是 5.1 ;
    还有不知道为什么 1 都变成了 001 ( 2 变成 002 、3 变成 003 、4 变成 004 等)。

    之所以采用 varchar,是因为该字段表示一种层级结构,比如 1.1 代表第一章第一节,5.1 代表第五章第五节,6.1.2 代表第六章第一节第二小节,但因为没有原来做该项目的公司留下的文档,所以没办法知道这些数据是怎么存储到 MySQL 中的,只知道原先开发用的 Java 。

    去 Google 英文搜索,也没找到相关内容,有大佬遇到过的吗?
    2 条回复    2020-12-01 19:53:41 +08:00
    Xusually
        1
    Xusually  
       2020-12-01 17:34:17 +08:00
    程序处理数据的时候当作 float/double 处理了
    zhangysh1995
        2
    zhangysh1995  
       2020-12-01 19:53:41 +08:00
    浮点数存储限制,可以强制小数点位数转换。
    用 CAST 转换成 Decimal,https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1340 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:01 · PVG 02:01 · LAX 10:01 · JFK 13:01
    ♥ Do have faith in what you're doing.