PHP: Converter um 64bit inteiro para string
-
21-08-2019 - |
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?
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 ()?