php - How to parse a String to a long with no loss

I'm having an issue when parsing a string to a long. I want the variable "695690829980893234" to be parsed to a long without any loss. I've looked around for a bit but nothing really seemed to have helped.

When using (double) $var it shows as a 4.2904753172133E+17 (which is not the way I need it)

Does anyone have any ideas? Much appreciated!

Answer

Solution:

In standard PHP, the type long does not exist.

So, if you want to have a long integer, you may use the standard int type, or use an extension, such as BC or GMP.

Specifically, the value 695690829980893234 is in the integer range of 64bit PHP, but out of the integer range of 32bit PHP.

  • To convert to int:

First, please make sure the number is in the int range. Then just convert

$res = intval("695690829980893234");
if($res<PHP_INT_MAX){
    // OK! inside the positive limitation
}
  • To convert to GMP

A GMP object represents an arbitrary length integer:

$res = gmp_init("695690829980893234");

Then, use GMP functions to operate the number, such as:

$res = gmp_add($res, gmp_init("100"));
$res = gmp_sub($res, gmp_init("200"));

and finally, convert it back to int or string:

$int = gmp_intval($res);
$str = gmp_strval($res);

Hope this answer helps.

Answer

Solution:

Be sure you're running 64-bit version of PHP.

echo PHP_INT_SIZE;
8

Then it will cast string to int easily

$a =  "695690829980893234";
$b =  (int)$a;
var_dump($a, $b);
string(18) "695690829980893234"
int(695690829980893234)

Source