mysql中涉及到钱的字段如何设计
1、我之前使用过的方法:用int型,精确到分,保存进去,显示的时候,再缩小100倍即可;
2、用decimal(10,2)类型,这个意思,你总共可以有10个小数位数,2表示你可以保存小数点后两位;
但是注意一点,你使用decimal之后,在PHP的浮点数相加时,是不准确的,一定要注意,这是解释型语言的通病,例如
$a = 0.1;
$b = 0.7;
var_dump(($a + $b) == 0.8);
打印出来的值居然为 boolean false
这是为什么呢?
根据PHP手册来说,这就是会丢失进度,所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
正确比较方式如下:
$a = 0.1;
$b = 0.7;
var_dump(bcadd($a,$b,2) == 0.8); //true
var_dump(bcadd($a,$b,1) == 0.8); //true
表示小数点后几位
这样就能解决浮点数的计算问题了