PHP关于金额数值的处理,number_format()与round()的使用


            在开发过程中,我们经常需要处理一些金额数值,一般将其格式化为保留两位小数点。 在PHP中,有number_format(), round()这么两个函数可以使用。

       最直接的是round()这个函数,其作用是对浮点数进行四舍五入。

       round(x, prec), 第一个参数是需要进行四舍五入的数值,第二个参数是要保留的小数点位数,例如round(3.158, 2)的结果是3.16, 这里需要注意的是参数x不能是'12,300.2'这样的字符串。

       这里要介绍的另一个函数是number_format(),其作用是对数字进行格式化,注意这里的格式化是千位分组,返回的结果是字符串。

            number_format(number, decimals, decimalpoint, separator),第一个参数是需要格式化的数值,后三个参数都为可选,依次是小数位数、用作小数点的字符串、用作千分位的字符串。

            第一次使用这个函数来处理金额数值的时候,我是使用的number_format(number, 2),目的是要将数值格式化为带两位小数的,测试结果也是满足我的需要。但是,当number的数值变为5000的时候,就报错了。原因在于number_format(5000, 2)的返回结果是‘5,000.00’,显然是字符串,将数值传递至前端,js对其进行数学运算的时候就会报错。

function test(){
    echo number_format(5000, 2);
    //5,000.00
}
       虽然在php中对这个函数的返回结果进行数学运算不会报错,但是其结果并不是我们想要的数值,如下所示:

function test(){
    echo number_format(5000, 2) + 2;
    //7
    echo number_format(5000, 2) * 2;
    //10
}

       也就是说'5,000.00'会被当成5来计算,因此我们在使用number_format()的时候需要规避这样的错误,需要对千分位的符号进行规定,也就是传入第4个参数。

function test(){
    echo number_format(5000, 2, '.', '');
    //5000.00
}
            将千分位字符设置为'',这样输出的结果就是我们想得到的5000.00了,虽然其结果实际上还是字符串,但是在进行数学运算的时候既不会报错也不会出现错误的计算结果。

      

你可能感兴趣的:(PHP)