Я пытаюсь использовать твердокодированное целое число 64 бит в строковой переменной.
Simplfied Я хочу сделать что-то вроде этого:
$i = 76561197961384956; $s = "i = $i";
Это должно привести к тому, что:
i = 76561197961384956
Это, очевидно, не работает, поскольку PHP отличает большие числа для float, поэтому s
:
i = 7.65611979614E+16
В то время как некоторые другие методы, такие как литье и т. Д., number_format()
неудачу, я нашел number_format()
и использовал его следующим образом:
$s = "i = " . number_format($i, 0, '.', '');
Но это приводит к тому, что:
i = 76561197961384960
Похож на проблему аппроксимации, но как это исправить?
Вы теряете точность в задании, а не в преобразовании строки. Если значение этой переменной действительно жестко закодировано, и вы не можете изменить это, вы ничего не можете сделать.
Строка вроде:
$i = 76561197961384956;
всегда будет терять точность. Если вам нужно сохранить все это, сохраните его в строке, вы не сможете сохранить его как int и сохранить все цифры.
Я думаю, что единственный способ – использовать функции bcmath
.
Для произвольной математики точности PHP предлагает Binary Calculator, который поддерживает числа любого размера и точности, представленные в виде строк.
Это ваш $i
, это неправильно, а не преобразование строк. PHP использует 32-битные int внутри.
на данный момент только способ сделать большую целую математику в php – использовать расширения bcmath или gmp, которые обрабатывают большие числа как строки. 64-битные целые числа строятся на php6.
поэтому при использовании больших целых чисел их отличить от строки или вы потеряете точность при назначении (автоматический прилив для float), а затем используйте в строковых математических библиотеках для дальнейшей обработки вашего номера.
Вы пытались использовать функцию intval () PHP?