負の数を変更せずに返す関数を設計する必要がありますが、数値がまだ存在しない場合は、数値の先頭に+
記号を追加する必要があります。
例:
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);
}
しかし、私はそのような些細なことにregex
を使用しないnotを提案します。 sprintf ここで次のように使用することをお勧めします。
function formatNum($num){
return sprintf("%+d",$num);
}
から sprintfのPHPマニュアル :
数値に記号(-または+)を強制的に使用するオプションの記号指定子。デフォルトでは、負の数の場合、-記号のみが数値に使用されます。 この指定子は、正の数にも+記号を付けるように強制し、PHP 4.3.0に追加されました。
function formatNum($num) {
return ($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);
}
@unicornaddictが提供する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));
}