前段时间我写了一个完全有效的脚本来神奇地移动十进制符号,并根据零的数量进行调整。
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');
上面的代码将在逗号或点号后跳过不需要的零。
答案 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()
。