Pregunta

Estoy tratando de utilizar un duro de 64 bits entero en una variable de cadena.

Se simplifican quiero hacer algo como esto:

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

Lo que debería resultar en s siendo:

i = 76561197961384956

Esto obviamente, no funciona como PHP elenco de grandes enteros a flotar, por lo tanto s es:

i = 7.65611979614E+16

Mientras que varios otros métodos como la fundición, etc.no, me encontró number_format() y utilizarlo como este:

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

Pero esto resulta en s siendo:

i = 76561197961384960

Se ve como una aproximación al problema, pero ¿cómo solucionar este problema?

¿Fue útil?

Solución

Estás perdiendo la precisión en la tarea, no en la conversión de cadenas. Si el valor de esta variable es en realidad codificada, y no se puede cambiar eso, no hay nada que puedas hacer.

una línea como:

$i = 76561197961384956;

Siempre perderá precisión. Si usted necesita para mantener todo el asunto, almacenarlo en una cadena, no se puede almacenar como un int así y mantener todos los dígitos.

Otros consejos

Creo que la única forma de hacerlo es utilizar la bcmath funciones.

  

Para operaciones matemáticas de precisión arbitraria, PHP ofrece la Calculadora Binaria que soporta números de cualquier tamaño y precisión, representada como cadenas.

¿Es su $i eso está mal, no es la conversión de cadenas - PHP utiliza 32 bits enteros internamente

.

por ahora única manera de hacer grandes operaciones aritméticas con enteros en php es el uso de extensiones de bcmath o GMP que manejan grandes números como cadenas. números enteros de 64 bits son cepilladas en PHP6.

Así que cuando se utilizan grandes números enteros las arrojó sobre la cadena o perderá precisión en la asignación (fundido automático para flotar) y luego usar en las bibliotecas de la cadena de matemáticas para procesar su número más.

¿Ha intentado utilizar la función intval del PHP ()?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top