以下代码:
$val = "209810563658809344";
echo sprintf('%0.0f', ($val - 1) + "<br />");
echo sprintf('%0.0f', (bcsub($val, 1)) + "<br />");
在Windows 32位输出中:
209810563658809344
209810563658809344
如何使减法正常工作?
答案 0 :(得分:3)
您的sprint()屏蔽和使用+
而不是.
进行连接都会强制转换为数值数据类型
$val = "209810563658809344";
echo sprintf('%0.0f', ($val - 1)) . '<br />';
echo bcsub($val, 1) . '<br />';
答案 1 :(得分:1)
避免转换为浮点数,你会没事的。
$val = "20981056365880934";
echo bcmul($val, 2, 0)." ≈ ".bcdiv($val, 2, 0)." × 2 + ".bcsub($val, 1, 0)." + 1";
请注意第三个scale参数,它允许您控制printf()
之类的精度。见the bc manual