Я должен разработать функцию для возврата неизменных отрицательных чисел, но должен добавить a +
знак в начале числа, если его уже никакой подарок.
Пример:
Input Output
----------------
+1 +1
1 +1
-1 -1
Это получит только числовой вход.
function formatNum($num)
{
# something here..perhaps a regex?
}
Эта функция будет названной несколько раз в echo/print
так более быстрое лучше.
Обновление:
Спасибо всем за ответы. Я должен сказать sprintf
основанное решение действительно быстро.
Вы можете использовать регулярное выражение как:
function formatNum($num){
return preg_replace('/^(\d+)$/',"+$1",$num);
}
Но я бы посоветовал не использовать регулярное выражение
для такой тривиальной вещи. Лучше использовать sprintf здесь как:
function formatNum($num){
return sprintf("%+d",$num);
}
Из Руководство PHP для sprintf :
Необязательный спецификатор знака, который заставляет использовать знак (- или +) по номеру. По умолчанию для числа используется только знак -, если он отрицательный. Этот спецификатор заставляет положительные числа также иметь знак + и был добавлен в PHP 4.3.0.
function formatNum($num) {
$num = (int) $num; // or (float) if you'd rather
return (($num >= 0) ? '+' : '') . $num; // implicit cast back to string
}
Решение 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));
}
function formatNum($num) {
return ($num>0)?'+'.$num:$num;
}