-
- sprintf(" %9.3f", 3.1415926); // 右揃え: 桁数が足りない場合は、スペースを使用して完成させます。結果: "3.142"
- sprintf(" %-9.3f", 3.1415926); //左揃え: 桁数が足りない場合は、スペースを使用して完成させます。結果: "3.142 "
- sprintf(" %.3f", 3.1415926); //合計幅を指定しないでください。結果: "3.142"
コードをコピーします
注:
-
- $num = 100;
- sprintf("%.2f", $num );
- sprintf("%.2f", (double)$num);
上記のコード
をコピーします2 つの結果は本当に同じですか?見た目は同じですが、次のような理由が考えられます。
原因分析: パラメーターがスタックにプッシュされるとき、呼び出し元は、num に対応するフォーマット制御文字が「%f」であることを知りません。
関数が実行されるとき、関数自体はスタックにプッシュされたものが整数であることを認識していないため、整数 $num を格納する貧弱な 4 バイトが意図せず浮動小数点数形式として解釈されることになり、全体が浮動小数点数形式として解釈されます。めちゃくちゃです。
|