28

負の数を変更せずに返す関数を設計する必要がありますが+、数値がまだ存在しない場合は、数値の先頭に符号を追加する必要があります。

例:

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

数値入力のみを取得します。

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

この関数はで数回呼び出されるecho/printので、速いほど良いです。

4

6 に答える 6

73

正規表現は次のように使用できます。

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

しかし、私はそのような些細なことに使用しないことをお勧めします。ここでsprintfregexを次のように使用することをお勧めします。

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

sprintfのPHPマニュアルから:

数値に符号(-または+)を使用するように強制するオプションの符号指定子。デフォルトでは、負の数の場合、-記号のみが数値に使用されます。この指定子は、正の数にも+記号を付けるように強制し、PHP4.3.0で追加されました。

于 2010-04-21T11:24:19.573 に答える
8
function formatNum($num) {
   return ((float) $num>0)?'+'.$num:$num;
}
于 2010-04-21T11:25:30.087 に答える
3
function formatNum($num) {
  $num = (int) $num; // or (float) if you'd rather
  return (($num >= 0) ? '+' : '') . $num; // implicit cast back to string
}
于 2010-04-21T11:29:02.350 に答える
1

@unicornaddictsprintfが提供するソリューションは非常に優れており、おそらく最もエレガントな方法です。とにかく代替手段を提供すると思っただけです。彼らがどのように速度を測定するのかわかりません。

// 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));
} 
于 2010-04-21T11:39:27.870 に答える