PHP: Conversione di un numero intero a 64 bit a stringa
-
21-08-2019 - |
Domanda
Sto cercando di utilizzare un intero a 64 bit hardcoded in una variabile stringa.
semplificazioni rese voglio fare qualcosa di simile:
$i = 76561197961384956;
$s = "i = $i";
che dovrebbe sfociare in s
essere:
i = 76561197961384956
Questo non significa, ovviamente, funziona come PHP gettato grandi numeri interi a galleggiare, quindi number_format()
è:
i = 7.65611979614E+16
Mentre diversi altri metodi come la fusione, ecc falliscono, ho trovato <=> e usarlo in questo modo:
$s = "i = " . number_format($i, 0, '.', '');
Ma questo si traduce in <=> essere:
i = 76561197961384960
Sembra un problema di approssimazione, ma come risolvere questo problema?
Soluzione
Stai perdendo la precisione l'assegnazione, non sulla conversione di stringa. Se il valore di questa variabile è effettivamente codificato, e non si può cambiare la situazione, non c'è niente che puoi fare.
Una linea simile:
$i = 76561197961384956;
perderà sempre di precisione. Se è necessario mantenere il tutto, conservarlo in una stringa, non è possibile memorizzare come un int così e mantenere tutte le cifre.
Altri suggerimenti
Credo che l'unico modo è quello di utilizzare la bcmath
funzioni.
Per la matematica a precisione arbitraria PHP offre il Binary Calculator che supporta numeri di qualsiasi dimensione e precisione, rappresentati da stringhe.
E 'il tuo $i
che è sbagliato, non la conversione di stringa - PHP utilizza 32 bit int internamente
per ora solo modo per fare grandi matematica intero in php è quello di utilizzare le estensioni bcmath o GMP che gestiscono grandi numeri come stringhe. interi a 64 bit vengono piallate in php6.
in modo che quando si utilizzano grandi numeri interi le precipitava stringa o si perde precisione su assegnazione (fusione automatica per galleggiare) e poi utilizzare su delle librerie matematiche stringa di elaborare ulteriormente il proprio numero.
Hai provato a usare la funzione intval del PHP ()?