2

次のコード:

$val = "209810563658809344";
echo sprintf('%0.0f', ($val - 1) + "<br />");     
echo sprintf('%0.0f', (bcsub($val, 1)) + "<br />"); 

Windows 32 ビット出力の場合:

209810563658809344
209810563658809344

減算を適切に機能させるにはどうすればよいですか?

4

2 に答える 2

3

あなたの sprint() マスキングと連結の+代わりに使用することの両方.が、数値データ型へのキャストを強制しています

$val = "209810563658809344";
echo sprintf('%0.0f', ($val - 1)) . '<br />';     
echo bcsub($val, 1) . '<br />';
于 2013-08-12T11:23:54.813 に答える
1

浮動小数点への変換を避ければ問題ありません。

$val = "20981056365880934";
echo bcmul($val, 2, 0)." ≈ ".bcdiv($val, 2, 0)." × 2 + ".bcsub($val, 1, 0)." + 1";

のように精度を制御できる 3 番目のスケール パラメータに注意してくださいprintf()bc マニュアルを参照してください

于 2013-08-12T11:35:23.023 に答える