php sprintf не возвращает точное значение - PullRequest
1 голос
/ 03 марта 2012

Функция 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 Ответ

2 голосов
/ 03 марта 2012

Некоторые числа слишком велики, чтобы их можно было хранить в целых числах, поэтому они аппроксимируются с использованием механики чисел с плавающей точкой.Если вам нужно работать с числами этой величины нетронутыми, рассмотрите возможность использования таких расширений, как BC Math или GMP .Эти расширения позволят вам выполнять операции с очень большими числами и получать их полное строковое представление для их вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...