php sprintf显示错误的数字

时间:2012-07-10 22:22:54

标签: php printf

我有一个奇怪的问题,PHP的sprintf似乎正在改变一些数字。这不会偶尔发生,只是偶尔发生。

以下代码:

echo sprintf('%04d',$product['priceUSD']*100)."(".($product['priceUSD']*100).")";

为$ 19.99产品生成以下输出:1998(1999)

我可以解决这个问题,但我很想知道它为什么会这样做,如果有任何方法可以解决这个问题。

更新: 从float转换为int时,它看起来似乎正在发生。以下给出了相同的输出:

echo (int)($product['priceUSD']*100)."(".($product['priceUSD']*100).")";

2 个答案:

答案 0 :(得分:0)

 echo sprintf('%.2f',$product['priceUSD']*100)."(".sprintf('%.2f',$product['priceUSD']*100).")";

您在寻找什么数字格式?

答案 1 :(得分:0)

首先关闭:%d有点像(int)演员。

19.99 = 1.99899999999999984368059813278E1 = 0x4033FD70A3D70A3D 
IEEE 64位中的

如果我们将浮点数乘以100得到1998.99999999999984368059813278E1,则转换为int 1998

“19.99只是其中一个......”(见@ Dragons Link) 要获得确切结果,请使用bcmath扩展名:

echo sprintf('%4d', bcmul ($price,100));