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

相关推荐
-
用PHP读取Excel、CSV文件2025-04-05 00:55:03
-
php替换字符你知道么,基础之数据类型--字符串2025-04-05 00:52:06
-
mysql insert 有哪4种形态?2025-04-05 00:40:40
-
php架构之CGI、FastCGI、php-fpm有什么关系?原来这么简单
php架构之CGI、FastCGI、php-fpm有什么关系?原来这么简单2025-04-05 00:37:41 -
php中抽象类和接口的对比2025-04-05 00:24:27