php 中对金额数值处理

在开发过程中,我们经常需要处理一些金额数值,一般将其格式化为保留两位小数点。 在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,接口获取数据对其进行数学运算的时候就会报错。

echo number_format(50007878787,2);//结果:50,007,878,787.00

虽在php中运算不会报错,但是结果也不是我们所需要的;例如:

echo number_format(8000, 2) + 2;  
//10  
echo number_format(8000, 2) * 2;  
//16

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

echo number_format(88000, 2, '.', '');  
//88000.00

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


评论

评论列表