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

时间:2011-03-14 02:26:31

标签: php floating-point printf

我正在调试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 个答案:

答案 0 :(得分:10)

您将格式类型修饰符放在格式类型说明符之后而不是之前。试试这个:

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

对于奇数输出,您的本地化设置可能正在执行此操作。尝试运行下面的行并查看为您的本地返回的内容。

echo setlocale(LC_ALL, null);

尝试将您的语言区域更改为不同的区域,以查看问题是否消失。像这样:

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