PHP关于保留几位小数的函数整理

1,096 阅读5分钟

本文已参与【新人创作礼】活动 ,一起开启掘金创作之路

# 1 round 函数

round() 函数对浮点数进行四舍五入 PHP round 函数 | 菜鸟教程

语法 round(number,precision,mode);

参数描述
number必需 规定要舍入的值
precision可选 规定小数点后的尾数 默认是0,也可以为负数
mode可选。规定表示舍入模式的常量:
- PHP_ROUND_HALF_UP -默认。遇到 .5 的情况时向上舍入 number 到 precision 小数位。舍入 1.5 到 2,舍入 -1.5 到 -2。
- PHP_ROUND_HALF_DOWN -遇到 .5 的情况时向下舍入 number 到 precision 小数位。舍入 1.5 到 1,舍入 -1.5 到 -1。
- PHP_ROUND_HALF_DOWN -遇到 .5 的情况时向下舍入 number 到 precision 小数位。舍入 1.5 到 1,舍入 -1.5 到 -1。
- PHP_ROUND_HALF_ODD -遇到 .5 的情况时取下一个奇数值舍入 number 到 precision 小数位。
#  所有的round函数作用的数字 最终的结果都跟符号无关(不管是正数还是负数)
    # 1 纯正数小数形式
    var_dump(round(0.88)); # 输出结果 float(1) 作用类似于 var_dump(ceil(0.88))  # 输出结果float(1)
    
    var_dump(round(0.38)); # 输出结果 float(0) 作用类似于 var_dump(floor(0.38)) # 输出结果float(0)
   
    # 2 纯负数小数形式
    var_dump(round(-0.88)); # 输出结果 float(-1) 作用类似于 var_dump(floor(-0.88)) # float(-1)
    
    var_dump(round(-0.38)); # 输出结果 float(-0) 作用类似于 var_dump(ceil(-0.38))  # float(-0)

     # 3 带整数的正数小数形式
    var_dump((round(8.88)); # 输出结果 float(9)
    
    var_dump((round(8.38)); # 输出结果 float(8)
    
     # 4 带整数的负数小数形式
    var_dump(round(-8.88)); # 输出结果 float(-9)
    
    var_dump(round(-8.38)); # 输出结果 float(-8)
    
    # 1 2 3 4 这四种情况表示不保留小数位 但是还是满足四舍五入的情况
    # round($num) 与 round($num,0) 这两种形式作用的结果一致 只是写法不一致

# 5数字保留两位小数(保留两位以上小数跟保留两位小数、保留一位小数类似)
    # 5 
    var_dump(round(3.1415926,2));  # float(3.14)
    
    var_dump(round(-3.1415926,2)); # float(-3.14)
    
# 6特殊情况(满足四舍五入)
    # 6 
    var_dump(round(31415926,-3)); # float(31416000) 从个位数开始往上计数 遇到数字9向高位进1

    var_dump(round(31415926,3));  # float(31415926) 没有小数位 保持不变 
    
# 7使用常量参数对数字进行四舍五入:
    # 7
    var_dump(round(9.7, 0, PHP_ROUND_HALF_UP));   # float(10) 作用类似于 var_dump(ceil(9.7))  # float(10)
    
    var_dump(round(9.1, 0, PHP_ROUND_HALF_DOWN)); # float(9)  作用类似于 var_dump(floor(9.1)) # float(9)
    
    var_dump(round(9.7, 0, PHP_ROUND_HALF_EVEN)); # float(10)
    
    var_dump(round(9.1, 0, PHP_ROUND_HALF_ODD));  # float(9)
    
    var_dump(round(8.8, 0, PHP_ROUND_HALF_EVEN)); # float(8)
    
    var_dump(round(8.1, 0, PHP_ROUND_HALF_ODD));  # float(9)
    

# 2 number_format 函数

number_format() 函数通过千位分组来格式化数字 PHP number_format函数 | 菜鸟教程

语法 number_format(number,decimals,decimalpoint,separator)

参数描述
number必需。要格式化的数字。如果未设置其他参数,则数字会被格式化为不带小数点且以逗号(,)作为千位分隔符。
decimals可选。规定多少个小数。如果设置了该参数,则使用点号(.)作为小数点来格式化数字。
decimalpoint可选。规定用作小数点的字符串。
separator可选。规定用作千位分隔符的字符串。仅使用该参数的第一个字符。比如 "xxx" 仅输出 "x"。 注释: 如果设置了该参数,那么所有其他参数都是必需的。
    # 1 number_format($num) 格式化数字 默认用千位分隔符','将$num参数进行分隔
    var_dump(number_format("88888888")); # string(10) "88,888,888"
    
    # 2 number_format($num,2) 格式化数字 默认用千位分隔符','将$num参数进行分隔并且保留两位小数 没有小数位保留几位小数就在小数点后面补几个零 
    var_dump(number_format("88888888",2));# string(13) "88,888,888.00"
   
    # 3 number_format($num,2,',','.') 格式化数字 用给出的千位分隔符'.'将$num参数进行分隔并且保留两位小数 小数点被替换成','
    var_dump(number_format("88888888",2,",","."));# string(13) "88.888.888,00"
    
    # 4 英文符号 默认
    var_dump(number_format("314159.26")); # string(7) "314,159"
    
    # 5 法语符号
    var_dump(number_format("314159.26" , 2 , ',' , ' ' )); # string(10) "314 159,26"
    
    # 6 会四舍五入
    var_dump(number_format('31415.926',2,'.','')); # string(8) "31415.93"

# 3 sprintf 函数

sprintf() 函数把格式化的字符串写入一个变量中。PHP sprintf 函数 | 菜鸟教程

语法 sprintf(format,arg1,arg2,arg++ )

参数描述
format必需。规定字符串以及如何格式化其中的变量。可能的格式值:- %% - 返回一个百分号 %- %b - 二进制数- %c - ASCII 值对应的字符- %d - 包含正负号的十进制数(负数、0、正数)- %e - 使用小写的科学计数法(例如 1.2e+2)- %E - 使用大写的科学计数法(例如 1.2E+2)- %u - 不包含正负号的十进制数(大于等于 0)- %f - 浮点数(本地设置)- %F - 浮点数(非本地设置)- %g - 较短的 %e 和 %f- %G - 较短的 %E 和 %f- %o - 八进制数- %s - 字符串- %x - 十六进制数(小写字母)- %X - 十六进制数(大写字母)附加的格式值。必需放置在 % 和字母之间(例如 %.2f):- + (在数字前面加上 + 或 - 来定义数字的正负性。默认情况下,只有负数才做标记,正数不做标记)- ' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。例如:%'x20s(使用 "x" 作为填充))- - (左调整变量值)- [0-9] (规定变量值的最小宽度)- .[0-9] (规定小数位数或最大字符串长度)注释: 如果使用多个上述的格式值,它们必须按照上面的顺序进行使用,不能打乱。
arg1必需。规定插到 format 字符串中第一个 % 符号处的参数。
arg2可选。规定插到 format 字符串中第二个 % 符号处的参数。
arg++可选。规定插到 format 字符串中第三、四等等 % 符号处的参数
    # 1 sprintf函数 保留两位小数
    var_dump(sprintf("%.2f", '31415.926')); # string(8) "31415.93"

    # 2 保留2为小数没有四舍五入,sprintf的特性会四舍五入小数后多保留了一位,然后用substr来截取前2位
    var_dump(substr(sprintf("%.3f",'31415.926'),0,-1)); # string(8) "31415.92"

# 4 php自定义保留几位小数方法

    /**
     * @title 自定义保留几位小数方法
     * @param $value
     * @param $num # 默认保留两位小数
     * @return string
     */
    function format_number($value,$num=2){
        $array  = explode('.',$value);
        $res = $array[0].'.'.substr($array[1],0,$num);
        return $res;
    }
    var_dump(format_number(3.1415926)); # string '3.14' (length=4)