/ match

float

通常在计算价格时,会碰到令人头疼的浮点数计算问题,日常生活中我们是以作为单位的,例如 9.9

永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

你看似有穷的小数, 在计算机的二进制表示里却是无穷的。

PHP 中的金额计算

$val1 = 3902 * 0.01;
echo $val1;
// 39.100000000000001
// 结果并不是 39.02

而且随着浮点数的计算量越大,误差也会逐步放大,差之毫厘谬以千里

为了避免这样的情况,主要有两种解决方案:

  1. 为计算单位,这样参与计算的全是整数;
  2. 为计算单位,使用 BC Math

这块的资金问题还是得考虑业务需求的。按我以前的做法,是保存4位小数。根据不同的场景,进行取舍!但前台所有显示的金额都只显示2位,并向下取数

我们生活中的金融系统最多只有两位小数位,比如12.37,精确到分。其实金融系统只是面向用户只展示了两位小数,比如你的余额是 12032.12,在银行系统里的真实值可能是 12032.12593... 保留有效的小数位数由系统所需的精度要求来决定。