php sprintf没有返回确切的值

时间:2012-03-03 10:33:50

标签: php printf

php函数sprintf不返回确切的值;

示例代码如下:

<?php
$var1 = 10469116213008843;
echo $var1;
echo "\n";

$var2 = sprintf("%.0f", $var1);
echo $var2;
echo "\n";
?>

猜猜会有什么结果?

在64位操作系统上,它产生:

10469116213008843
10469116213008844

在32位操作系统上,它产生:

1.0469116213009E+16
10469116213008844

我真的很困惑,为什么?

#include <stdio.h>

/**
 * 18456116213465313, 18456116950744489, 17705116944636053, 
 * 18456116950744489, 13368116212523055, 10469116213008843, 
 * 19986116955764391, 19591116945040018, 11882116944120195,
 * 19166116210920723, 19166116210920723 
 */
int main()
{
    double oddVariable = 18456116213465313;
    printf("%0.f\n", oddVariable);

    oddVariable = 18456116213465313;
    printf("%.0f\n", oddVariable);

    oddVariable = 18456116213465313;
    printf("%.0f\n", oddVariable);

    return 0;

}

1 个答案:

答案 0 :(得分:2)

有些数字太大而无法用整数表示,所以使用浮点力学来近似它们。如果您需要处理如此大小的数字,请考虑使用BC MathGMP等扩展程序。这些扩展将允许您对非常大的数字执行操作并获取其完整的字符串表示以输出它们。