之前在学习Django中ORM的时候,一直不明白怎么有一个数据类型叫Decimal。直到最近在一个项目中遇到了小数点计算的问题,发现要解决小数计算的精度问题,还真得用到这个Decimal不可。
问题描述
浮点数在内存中存储的时候因为存储机制的原因,天然存在精度丢失的现象,具体原因这里不赘述了,感兴趣的朋友可以参考另一篇博客《浮点型数据精度丢失实例详解》。
a=2.2
a*3
Out[16]: 6.6000000000000005
本来期望的结果是6.6,结果小数点后多出来一长串。如果是对数字不敏感的项目其实是没问题的,但是如果涉及到金融领域,例如电商的购物车价格计算,银行余额的计算,小数点后10几位多个5也都是不能容忍的。
所以有能力精确进行浮点数计算还是有必要的。