[转]PHP 处理金额

  • 后端
  • 2022-05-23
  • 798 已阅读
  • 作者: Haoyuqi
  • 来源: segmentfault
     
简介PHP 的浮点数是不能精确计算的,具体的可以看这篇文章。所幸的是,金额一般不会有太多的小数。那么存储的时候呢,一言以蔽之,以 分 为单位进行存储。在 MySQL 中,以 int 类型存储就行了(视情况选择字段类型)。

导语

涉及到金额的代码,一定要谨慎处理。刚好最近做了相关的功能,下面大概说一下。

存储

PHP 的浮点数是不能精确计算的,具体的可以看这篇文章。所幸的是,金额一般不会有太多的小数。那么存储的时候呢,一言以蔽之,以 分 为单位进行存储。在 MySQL 中,以 int 类型存储就行了(视情况选择字段类型)。

计算

上面提到以 分 为单位存储,也就是 1 元存储为 100 分。可以使用 PHP 内置的 BC Math 系列函数进行计算。日后会再写一篇详解。

格式化金额

下面是格式化金额的实例

/**
 * 格式化金额 * @param $price
 * @return string
 */
public function formatPrice($price)
{
    if (!is_numeric($price)) {
        $price = 0;
    }

    return number_format(bcdiv($price, 100, 2), 2);
}

很赞哦! ( 0 )