Python 之 MySql“未解之谜”05--表示金钱的用什么类型?
one day
Python大星在做业务需求时
需要创建一张新表
涉及到金额字段
我们知道金额单位是元,会有 2 位小数的情况
这个时候,MySql 数据库中该选择哪个类型呢?
当时,Python大星 在公司数据库中发现了一个神操作

给金额单位设置为分
字段类型为 bigint

但是在使用过程中,
Python 大星发现诸多不便之处:
● 金额单位“分”数据转换单位“元”,每次需要除以100
● 如果忘记处理或者粗心漏处理,将造成生产事故,用户恐慌
我们再来看下《阿里巴巴开发手册》第6点

如果 MySql 中金额字段单位为“元”,保留2位小数
我们可以用 decimal 类型

● 为什么 float 和 double 存在精度丢失的问题,而 decimal 却没有?
float 和 double 是以二进制存储,所以有一定的误差
decimal 值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度
● 数据库 价格字段 设置 decimal (8,2),价格为 100W,只显示 999999.99

decimal (M,D),M 是数字最大位数,D 是小数点右侧数字个数

decimal (8,2) 数值范围是 -999999.99 ~ 999999.99
1000000 超过了 6 位,严格模式下报错,非严格模式存成 999999.99
● 扩展:在 Python 中也存在这样的问题 >>>

通过试验,我们可以知道上述程序输出结果为False
● 在 Python 中如何比较两个float类型是否相等???
python3.5 之后,PEP485 提案中已给出了解决方案
使用 math.isclose 方法,传入需要比较的两个数和可以接受的精度差值即可

相关推荐
-
「nginx」十、nginx的location配置详解2026-07-04 00:51:45 -

最清晰的mysql体系架构图 ,助你深度掌握MySQL开发管理,赢在大数据时代
最清晰的mysql体系架构图 ,助你深度掌握MySQL开发管理,赢在大数据时代2026-07-04 00:21:47 -
PHP读取Excel内的图片2026-07-03 00:07:41 -
mysql:Otter跨机房数据同步(单向)2026-07-03 00:02:48 -

在windows10系统下搭建IIS+PHP+MYSQL+phpMyAdmin服务器运行环境
在windows10系统下搭建IIS+PHP+MYSQL+phpMyAdmin服务器运行环境2026-07-02 00:15:08