Python 之 MySql“未解之谜”05--表示金钱的用什么类型?

100人浏览   2024-08-09 08:32:21


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



相关推荐