php 金额由元转成分

由于php浮点型的问题,金额元转分的时候,如果直接*100的话,会造成精度问题

$price = intval(19.9 * 100);

// 输出结果为1989

所以我们就不能直接进行转化,可以使用php的高精度计算函数bc

$price = intval(bcmul(19.9, 100));

// 输出结果1990

 

除此之外,我在想还有没有其他的方案呢?比方说使用字符串的方式来处理,通过将小数点进行向右移动两位,不足的补0

function float2Int($price)
    {
        // 拆成整数部分和小数部分放到数组中
        $temp = explode('.', $price);
        if (count($temp) > 2) {
            throw new CommonException(CommonException::INVALID_ARGS, '错误的金额字段');
        }
        // 如果只有整数部分,则补上小数部分00
        if (!isset($temp[1])) {
            $temp[1] = '00';
        }
        //以防万一,小数部分补气到4位然后截取前两位小数部分
        $temp[1] = substr(str_pad($temp[1], 4), 0, 2);
        // 链接整数部分和前两位小数并转成int型,完成金额元转分
        return intval(implode('', $temp));
    }
float2Int(19.9);

// 输出结果1990

 

posted @ 2023-04-20 15:03  风哀伤  阅读(190)  评论(0编辑  收藏  举报