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

2020-12-01 17:32:38 +08:00
 lafuerza
给甲方做数据清洗和治理,库中某 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 英文搜索,也没找到相关内容,有大佬遇到过的吗?
2412 次点击
所在节点    MySQL
2 条回复
Xusually
2020-12-01 17:34:17 +08:00
程序处理数据的时候当作 float/double 处理了
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731063

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX