如何在PHP中使用加号为正数加前缀

时间:2010-04-21 11:22:44

标签: php regex string number-formatting

我需要设计一个函数来返回负数,但如果数字已经没有,那么应该在数字的开头加一个+符号。

示例:

Input     Output
----------------
+1         +1
1          +1
-1         -1

它只会获得数字输入。

function formatNum($num)
{
# something here..perhaps a regex?
}

此函数将在echo/print中多次调用,因此越快越好。

更新:

谢谢大家的答案。我必须告诉基于sprintf的解决方案真的很快。

6 个答案:

答案 0 :(得分:60)

您可以将正则表达式用作:

function formatNum($num){
    return preg_replace('/^(\d+)$/',"+$1",$num);
}

但我会建议使用regex这样一件微不足道的事情。最好在这里使用sprintf

function formatNum($num){
    return sprintf("%+d",$num);
}

来自PHP Manual for sprintf

  

一个可选的符号说明符,用于强制在数字上使用符号( - 或+)。默认情况下,如果数字为负数,则仅使用 - 符号。 此说明符强制正数加上+号符号,并在PHP 4.3.0中添加。

答案 1 :(得分:6)

function formatNum($num) {
   return ($num>0)?'+'.$num:$num;
}

答案 2 :(得分:2)

function formatNum($num) {
  $num = (int) $num; // or (float) if you'd rather
  return (($num >= 0) ? '+' : '') . $num; // implicit cast back to string
}

答案 3 :(得分:1)

@unicornaddict提供的sprintf解决方案非常好,可能是最优雅的方式。只是觉得我无论如何都会提供替代方案。不知道他们如何衡量速度。

// Non float safe version
function formatNum($num) {
    return (abs($num) == $num ? '+' : '') . intval($num);
}

// Float safe version
function formatNum($num) {
    return 
        (abs($num) == $num ? '+' : '') 
        . (intval($num) == $num ? intval($num) : floatval($num));
}

// Float safe version, alternative
function formatNum($num) {
    return 
        (abs($num) == $num ? '+' : '') 
        // Add '1' to $num to implicitly cast it to a number
        . (is_float($num + 1) ? floatval($num) : intval($num));
} 

答案 4 :(得分:1)

简单的解决方案是在printf()函数中使用格式说明符。

例如,

$num1=2;
$num2=-2;
printf("%+d",$num1);
echo '<br>';
printf("%+d",$num2);

给出输出

+2
-2

在你的情况下

 function formatNum($num){
    return printf("%+d",$num);
 }

答案 5 :(得分:0)

试试这个:

$fmt = new NumberFormatter('es_ES', NumberFormatter::DECIMAL);
$fmt->setTextAttribute(NumberFormatter::POSITIVE_PREFIX, '+');
$result = $fmt->format(10000);

结果将是:+10.000

完全有效NumberFormatter::POSITIVE_SUFFIX,您将收到10.000+