2013-08-12 104 views
2

下面的代码添加64个数字:在32位Windows

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

在windows 32位输出:

209810563658809344 
209810563658809344 

如何进行减法正常工作?

+0

你知道BC数学的,但再投以“%0.0F”的面具被铸造浮动输出回数... –

+3

冲刺(),只不过是回应您的BC数学 –

+0

阿尔瓦罗结果,你能解释一下吗?不使用printf只输出2.09810563659E + 17 – SoftwareAndOutsourcing

回答

3

无论您的冲刺()掩蔽和级联使用+代替.迫使强制转换为数字类型

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

这适用于该特定示例,但不适用于355325317306527744. – SoftwareAndOutsourcing

+0

它的工作原理:http://3v4l.org/f8a1A – eisberg

+0

它也适用于355325317306527744,请另行示范! –

1

避免转换为浮点,你会没事的。

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

注意第三个尺度参数,它允许您控制精度像printf()。见the bc manual

+0

似乎我做错了什么,bcsub($ val,1)很好,谢谢! – SoftwareAndOutsourcing