在32位窗口中添加64位数字

时间:2013-08-12 11:04:20

标签: php

以下代码:

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

在Windows 32位输出中:

209810563658809344
209810563658809344

如何使减法正常工作?

2 个答案:

答案 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