资讯专栏INFORMATION COLUMN

PHP 处理金额

asce1885 / 1491人阅读

摘要:导语涉及到金额的代码,一定要谨慎处理。所幸的是,金额一般不会有太多的小数。那么存储的时候呢,一言以蔽之,以分为单位进行存储。格式化金额下面是格式化金额的实例格式化金额参考资料关于浮点数你应该知道的浮点数的一个常见问题的解答。

导语

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

存储

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);
    }

参考资料: 关于PHP浮点数你应该知道的(All ‘bogus’ about the float in PHP)、PHP浮点数的一个常见问题的解答、BC Math。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30060.html

相关文章

  • PHP接入微信退款接口

    摘要:项目版本微信的退款操作,通过封装与前面支付宝退款除了配置文件,基本一样。微信仅能每次退款笔如果想要实现一次退订多笔订单,可在客户端通过循环来处理。 payment 项目2.0版本 微信的退款操作,通过封装与前面支付宝退款除了配置文件,基本一样。 退款代码如下: use PaymentRefundContext; use PaymentCommonPayException; use P...

    caspar 评论0 收藏0
  • 高并发红包整体设计方案

    摘要:记录下整体的设计思路以及运营过程中的各种问题。如果钱是负数了,还得从已生成的小红包中抽取回来将红包放入队列之中创建红包失败,请检查参数生产和之间的随机数,但是概率不是平均的,从到方向概率逐渐加大。 公司前段时间根据业务方需求需要做一个抢红包的活动,网上也搜索了很多资料。记录下整体的设计思路以及运营过程中的各种问题。 产品需求: 1.红包支持配置开始时间、结束时间、类型(随机金额或固定金...

    shenhualong 评论0 收藏0
  • 高并发红包整体设计方案

    摘要:记录下整体的设计思路以及运营过程中的各种问题。如果钱是负数了,还得从已生成的小红包中抽取回来将红包放入队列之中创建红包失败,请检查参数生产和之间的随机数,但是概率不是平均的,从到方向概率逐渐加大。 公司前段时间根据业务方需求需要做一个抢红包的活动,网上也搜索了很多资料。记录下整体的设计思路以及运营过程中的各种问题。 产品需求: 1.红包支持配置开始时间、结束时间、类型(随机金额或固定金...

    cheukyin 评论0 收藏0
  • 高并发红包整体设计方案

    摘要:记录下整体的设计思路以及运营过程中的各种问题。如果钱是负数了,还得从已生成的小红包中抽取回来将红包放入队列之中创建红包失败,请检查参数生产和之间的随机数,但是概率不是平均的,从到方向概率逐渐加大。 公司前段时间根据业务方需求需要做一个抢红包的活动,网上也搜索了很多资料。记录下整体的设计思路以及运营过程中的各种问题。 产品需求: 1.红包支持配置开始时间、结束时间、类型(随机金额或固定金...

    Freeman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<