2

The following code:

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

In windows 32 bit outputs:

209810563658809344
209810563658809344

How can be made the subtraction to work properly?

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";

请注意第三个比例参数,它允许您控制精度,例如printf(). 参见bc 手册

于 2013-08-12T11:35:23.023 回答