次のコード:
$val = "209810563658809344";
echo sprintf('%0.0f', ($val - 1) + "<br />");
echo sprintf('%0.0f', (bcsub($val, 1)) + "<br />");
Windows 32 ビット出力の場合:
209810563658809344
209810563658809344
減算を適切に機能させるにはどうすればよいですか?
次のコード:
$val = "209810563658809344";
echo sprintf('%0.0f', ($val - 1) + "<br />");
echo sprintf('%0.0f', (bcsub($val, 1)) + "<br />");
Windows 32 ビット出力の場合:
209810563658809344
209810563658809344
減算を適切に機能させるにはどうすればよいですか?
あなたの sprint() マスキングと連結の+
代わりに使用することの両方.
が、数値データ型へのキャストを強制しています
$val = "209810563658809344";
echo sprintf('%0.0f', ($val - 1)) . '<br />';
echo bcsub($val, 1) . '<br />';
浮動小数点への変換を避ければ問題ありません。
$val = "20981056365880934";
echo bcmul($val, 2, 0)." ≈ ".bcdiv($val, 2, 0)." × 2 + ".bcsub($val, 1, 0)." + 1";
のように精度を制御できる 3 番目のスケール パラメータに注意してくださいprintf()
。bc マニュアルを参照してください