我需要设计一个函数,返回负数不变,但应添加一个+符号在数字的开始,如果它已经没有了。示例:
+
Input Output ---------------- +1 +1 1 +1 -1 -1
它将只获得数字输入。
function formatNum($num) { # something here..perhaps a regex? }
这个函数将在echo/print中被调用几次,所以越快越好。
echo/print
uz75evzq1#
您可以将regex用作:
function formatNum($num){ return preg_replace('/^(\d+)$/',"+$1",$num); }
但是我建议不要使用regex来做这样一件小事,最好在这里使用sprintf:
regex
function formatNum($num){ return sprintf("%+d",$num); }
从PHP Manual for sprintf开始:一个可选的符号说明符,强制在数字上使用符号(-或+)。默认情况下,只有当数字是负数时,才会使用-符号。这个说明符强制正数也要附加+符号,它是在PHP 4.3.0中添加的。
zpqajqem2#
function formatNum($num) { return ((float) $num>0)?'+'.$num:$num; }
5ktev3wc3#
function formatNum($num) { $num = (int) $num; // or (float) if you'd rather return (($num >= 0) ? '+' : '') . $num; // implicit cast back to string }
mwngjboj4#
简单的解决方案是在printf()函数中使用格式说明符。例如,
$num1=2; $num2=-2; printf("%+d",$num1); echo '<br>'; printf("%+d",$num2);
给出输出
+2 -2
就你而言
function formatNum($num){ return printf("%+d",$num); }
mu0hgdu05#
试试这个:
$fmt = new NumberFormatter('es_ES', NumberFormatter::DECIMAL); $fmt->setTextAttribute(NumberFormatter::POSITIVE_PREFIX, '+'); $result = $fmt->format(10000);
结果将为:+10.000完全符合NumberFormatter::POSITIVE_SUFFIX,您将收到10.000+
+10.000
NumberFormatter::POSITIVE_SUFFIX
10.000+
szqfcxe26#
sprintf解决方案由@ unicornaddicate提供,非常好,可能是最优雅的方式去。只是觉得我会提供一个替代品,无论如何。不知道他们如何衡量速度。
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)); }
jbose2ul7#
好吧,这是相当旧,可能没有用,但我认为仍然有一些空间,稍微增加,如果你有数字“准备好”:
if($num>=0) $num='+'.(0+$num);
或者,如果您确定它是一个数字:
if($num>=0) $num='+'.$num;
7条答案
按热度按时间uz75evzq1#
您可以将regex用作:
但是我建议不要使用
regex
来做这样一件小事,最好在这里使用sprintf:从PHP Manual for sprintf开始:
一个可选的符号说明符,强制在数字上使用符号(-或+)。默认情况下,只有当数字是负数时,才会使用-符号。这个说明符强制正数也要附加+符号,它是在PHP 4.3.0中添加的。
zpqajqem2#
5ktev3wc3#
mwngjboj4#
简单的解决方案是在printf()函数中使用格式说明符。
例如,
给出输出
就你而言
mu0hgdu05#
试试这个:
结果将为:
+10.000
完全符合
NumberFormatter::POSITIVE_SUFFIX
,您将收到10.000+
szqfcxe26#
sprintf
解决方案由@ unicornaddicate提供,非常好,可能是最优雅的方式去。只是觉得我会提供一个替代品,无论如何。不知道他们如何衡量速度。jbose2ul7#
好吧,这是相当旧,可能没有用,但我认为仍然有一些空间,稍微增加,如果你有数字“准备好”:
或者,如果您确定它是一个数字: