2013-08-12 106 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