Как снабдить префиксом положительное число знак "плюс" в PHP

Я должен разработать функцию для возврата неизменных отрицательных чисел, но должен добавить a + знак в начале числа, если его уже никакой подарок.

Пример:

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

Это получит только числовой вход.

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

Эта функция будет названной несколько раз в echo/print так более быстрое лучше.

Обновление:

Спасибо всем за ответы. Я должен сказать sprintf основанное решение действительно быстро.

22
задан user318466 22 April 2010 в 05:33
поделиться

4 ответа

Вы можете использовать регулярное выражение как:

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

Но я бы посоветовал не использовать регулярное выражение для такой тривиальной вещи. Лучше использовать sprintf здесь как:

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

Из Руководство PHP для sprintf :

Необязательный спецификатор знака, который заставляет использовать знак (- или +) по номеру. По умолчанию для числа используется только знак -, если он отрицательный. Этот спецификатор заставляет положительные числа также иметь знак + и был добавлен в PHP 4.3.0.

63
ответ дан 29 November 2019 в 03:32
поделиться
function formatNum($num) {
  $num = (int) $num; // or (float) if you'd rather
  return (($num >= 0) ? '+' : '') . $num; // implicit cast back to string
}
2
ответ дан 29 November 2019 в 03:32
поделиться

Решение sprintf , предоставляемое @unicornaddict, очень хорошее и, вероятно, наиболее элегантное решение. Просто подумал, что все равно предоставлю альтернативу. Не уверен, насколько они соответствуют скорости.

// 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));
} 
1
ответ дан 29 November 2019 в 03:32
поделиться
function formatNum($num) {
   return ($num>0)?'+'.$num:$num;
}
7
ответ дан 29 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: