PHP中的浮点数格式错误(sprintf,printf)

5
我正在调试PHP代码,并发现以下问题:
$a = 111749392891;

printf('%f', $a);
111749392890.:00000

printf('%F', $a);
111749392890.:00000

printf('%F.2', $a)
111749392890.:00000.2

printf('%F0.2', $a);
111749392890.:000000.2

number_format($a, 2, '.','');
111749392891.00

只有使用 number_format() 函数输出的结果对我来说看起来是正确的。我有什么遗漏吗?我正在使用 PHP 5.3 版本。

1个回答

13

您将格式类型修饰符放在格式类型说明符之后,而不是之前。请尝试以下内容:

printf('%.2F', $a)

至于输出结果的奇怪情况,可能是由于您的本地化设置所致。尝试运行下面的代码,并查看您的本地是否返回了期望结果。

echo setlocale(LC_ALL, null);

尝试将本地化设置更改为不同的内容,以查看问题是否消失。像这样:

setlocale(LC_ALL, 'en_CA.UTF-8');

这个可以,谢谢。但是空的格式类型修饰符怎么处理?这个有意义吗 -> 111749392890.:0000019? - ambienthack
更新了我的回答,我不能确定它是否是问题,但这是我能想到的唯一可能性。 - MitMaro
我的本地环境是Russian_Russia.1251,已更改为en_CA.UTF-8,但结果相同。实际上返回的是111749392890:00000,而不是111749392890:0000019。 - ambienthack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接