PHP格式编号,省略尾随零

时间:2017-12-06 07:39:07

标签: php

前段时间我写了一个完全有效的脚本来神奇地移动十进制符号,并根据零的数量进行调整。

https://github.com/jenstornell/magic-number-format/blob/master/magic-number-format.php

我仍然想知道,是否有PHP功能来解决这个问题?我觉得我的代码太多了:

<?php
function magic_number_format($number) {
    $pos = strpos($number, '.');
    $pos = ( ! $pos ) ? strpos($number, ',') : $pos;

    if( $pos ) {
        $count = strlen($number) - $pos - 1;
        $last = substr($number, -$count);
        $split = str_split($last);
        $split = array_reverse($split);

        $break = false;

        foreach( $split as $char ) {
            if( $char == 0 && $break == false ) {
                $count--;
            }

            if( $char != 0 ) {
                $break = true;
            }
        }

        $first = number_format( substr($number, 0, $pos ), 0, '', '.' );
        $last = substr($number, $pos + 1, $count);
        $result = $first . ',' . $last;

        $result = ( ! is_numeric( substr($result, -1) ) ) ? substr($result, 0, -1) : $result;

        return $result . "\n";
    }
    return number_format( $number, 0, '', '.' ) . "\n";
}

echo magic_number_format('25');
echo magic_number_format('123.32');
echo magic_number_format('12312.3233');
echo magic_number_format('12.0100000');
echo magic_number_format('1231,00');
echo magic_number_format('1231,10');
echo magic_number_format('1,1');

上面的代码将在逗号或点号后跳过不需要的零。

1 个答案:

答案 0 :(得分:3)

你正在重新发明轮子。此外,作为重复链接的答案中的代码既不是唯一的方法也不是最佳方法(它也不一定与您的问题完全相关)。您可以使用普通printf()格式的普通%s成功保留预期结果。测试用例:

$vals = [ 1, 1.000, 1.1, 1.230 ];
foreach ($vals as $val) {
    printf("%s\n", $val);
}

会产生所需的:

1     
1                                                                                                                                                      
1.1                                                                                                                                                         
1.23   

如果您需要将格式化的值分配给变量,那么将printf)替换为sprintf()