0

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!

mugai
  • 31
  • 2

2 Answers2

0

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)
Vláďa
  • 41
  • 4
  • Thanks, but unfortunately the server I'm running has 32-bit PHP, if nothing else seems to work I'll probably switch. Thank you – mugai Jun 10 '20 at 08:36
0

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.

tgarm
  • 473
  • 3
  • 8
  • This seems to work but still has the number in a string object when using it so search, the problem I'm having is this: user requests a certain server with the "695690829980893234" id, since this GET request will always return an string searching with that in my Mongodb will not work, converting it to an int didn't work either since the server is using 32-bit PHP. I'm gonna look around for a bit but probably switch to the 64-bit version. Thank you! – mugai Jun 10 '20 at 08:39
  • If you use 32bit PHP, the problem is that 'int' can't represent such a big number. So, it depends on what MongoDB library you are using, and how the library deal with numbers bigger than PHP_INT_MAX. We may try some other workaround if more information provided. – tgarm Jun 10 '20 at 13:35
  • I've fixed my problem by simply upgrading to 64-bit PHP. – mugai Jun 22 '20 at 11:49