Pergunta

Eu estou tentando usar um número inteiro de 64 bits codificado em uma variável de cadeia.

Simplfied eu quero fazer algo como isto:

$i = 76561197961384956;
$s = "i = $i";

que deve resultar em ser s:

i = 76561197961384956

Isto não faz, obviamente, o trabalho como PHP lançar grandes números inteiros para flutuam, portanto s é:

i = 7.65611979614E+16

Enquanto vários outros métodos, como vazamento etc. falhar, eu achei number_format() e usá-lo como este:

$s = "i = " . number_format($i, 0, '.', '');

Mas isso resulta em ser s:

i = 76561197961384960

Parece um problema de aproximação, mas como consertar isso?

Foi útil?

Solução

Você está perdendo a precisão na atribuição, e não na conversão de cadeia. Se o valor dessa variável é realmente codificado, e você não pode mudar isso, não há nada que você pode fazer.

A linha como:

$i = 76561197961384956;

vontade de precisão sempre perde. Se você precisa manter a coisa toda, armazená-lo em uma string, você não pode armazená-lo como um int como esse e manter todos os dígitos.

Outras dicas

Eu acho que a única maneira é usar as funções bcmath .

Para matemática de precisão arbitrária PHP oferece a Calculadora Binária com suporte a números de qualquer tamanho e precisão, representados como strings.

É seu $i que está errado, não a conversão de cadeia -. PHP usa 32 ints bits internamente

por enquanto única maneira de fazer grande matemática inteiro em php é usar bcmath ou GMP extensões que lidam com grandes números como strings. inteiros de 64 bits são aplainada em PHP6.

então quando usando inteiros grandes lançá-los para string ou você vai perder precisão na atribuição (cast automático para float) e, em seguida, usar em uma das bibliotecas seqüência de matemática para processar o seu número ainda mais.

Você já tentou usar a função intval do PHP ()?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top