我需要设计一个函数以不变地返回负数,但+
如果它已经不存在,则应在数字的开头添加一个符号。
例子:
Input Output
----------------
+1 +1
1 +1
-1 -1
它只会得到数字输入。
function formatNum($num)
{
# something here..perhaps a regex?
}
这个函数会被多次调用,echo/print
所以越快越好。
我需要设计一个函数以不变地返回负数,但+
如果它已经不存在,则应在数字的开头添加一个符号。
例子:
Input Output
----------------
+1 +1
1 +1
-1 -1
它只会得到数字输入。
function formatNum($num)
{
# something here..perhaps a regex?
}
这个函数会被多次调用,echo/print
所以越快越好。
您可以将正则表达式用作:
function formatNum($num){
return preg_replace('/^(\d+)$/',"+$1",$num);
}
但我建议不要使用regex
这种微不足道的东西。最好在这里使用sprintf作为:
function formatNum($num){
return sprintf("%+d",$num);
}
强制在数字上使用符号(- 或 +)的可选符号说明符。默认情况下,如果数字为负数,则仅在数字上使用 - 符号。此说明符强制正数也附加 + 号,并在 PHP 4.3.0 中添加。
function formatNum($num) {
return ((float) $num>0)?'+'.$num:$num;
}
function formatNum($num) {
$num = (int) $num; // or (float) if you'd rather
return (($num >= 0) ? '+' : '') . $num; // implicit cast back to string
}
简单的解决方案是在 printf() 函数中使用格式说明符。
例如,
$num1=2;
$num2=-2;
printf("%+d",$num1);
echo '<br>';
printf("%+d",$num2);
给出输出
+2
-2
在你的情况下
function formatNum($num){
return printf("%+d",$num);
}
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));
}
试试这个:
$fmt = new NumberFormatter('es_ES', NumberFormatter::DECIMAL);
$fmt->setTextAttribute(NumberFormatter::POSITIVE_PREFIX, '+');
$result = $fmt->format(10000);
结果将是:+10.000
确实有效NumberFormatter::POSITIVE_SUFFIX
,您将收到10.000+