Как префикс положительного числа со знаком плюс в PHP
мне нужно разработать функцию для возврата отрицательных чисел без изменений, но должен добавить +
знак в начале ряда, если его уже нет.
пример:
Input Output
----------------
+1 +1
1 +1
-1 -1
он получит только числовой ввод.
function formatNum($num)
{
# something here..perhaps a regex?
}
эта функция будет вызываться несколько раз в echo/print
Так чем быстрее, тем лучше.
обновление:
спасибо всем за ответы. Я должен сказать sprintf
решение очень быстро.
5 ответов
вы можете использовать regex как:
function formatNum($num){
return preg_replace('/^(\d+)$/',"+",$num);
}
но я бы предложил не используя regex
для такой тривиальной вещью. Его лучше использовать 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));
}
простое решение-использовать спецификатор формата в функции printf ().
например,
$num1=2;
$num2=-2;
printf("%+d",$num1);
echo '<br>';
printf("%+d",$num2);
дает выход
+2
-2
в вашем случае
function formatNum($num){
return printf("%+d",$num);
}