上图以java为例,描述出了我们常见的小数位加减带来的精度问题,不仅仅是java,php,js等等其他语言也都有类似问题,有些语言提供了类似decimal的数据类型,用来精确计算,mysql数据库也有相关的数据类型。

 

但这里不介绍上述通过调整数据类型来实现的方式,让我们换一种思路:

用int整形来定义金钱类型。

 

假设项目需要我们精确到小数点后两位,如:12.55元,那么我们可以在代码中定义一个常量,如multiple = 100,数据库中存储的值为12.55 * multiple(100) = 1255,代码中计算也是用1255来计算,这样我们就等于是在进行整型计算,最后返回给客户端时,将整型值除以multiple(100),即1255 / 100 = 12.55,这样就轻松简单多了,无需考虑复杂的数据类型,计算也方便。

 

 

转化成整数计算后,还要考虑一个问题:小数位多的情况下,转成整数,会非常大,那么两个超大整数相乘的结果,是否超出了该整数定义的类型范围,避免计算结果溢出。

 

posted on 2021-01-13 11:15  Boom__Clap  阅读(322)  评论(0编辑  收藏  举报