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 方法,传入需要比较的两个数和可以接受的精度差值即可

相关推荐
-
PHP8种变量类型的详细讲解2025-02-22 00:32:24
-
php+apache 和 php+nginx的区别2025-02-22 00:21:27
-
PHP:与workerman结合实现定时任务2025-02-22 00:15:57
-
Nginx的Rewrite规则与实例2025-02-22 00:15:39
-
MySql中身份证字段的简单脱敏介绍2025-02-22 00:15:36