문제

문자열 변수에서 하드 코드 64 비트 정수를 사용하려고합니다.

단순화 나는 다음과 같은 일을하고 싶습니다.

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

결과적으로 발생해야합니다 s 존재:

i = 76561197961384956

이것은 PHP가 큰 정수를 캐스트하기 위해 분명히 작동하지 않습니다. s 이다:

i = 7.65611979614E+16

캐스팅 등과 같은 몇 가지 다른 방법이 실패했지만 number_format() 다음과 같이 사용하십시오.

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

그러나 이것은 결과입니다 s 존재:

i = 76561197961384960

근사치 문제처럼 보이지만이 문제를 해결하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

문자열 변환이 아닌 과제의 정밀도를 잃고 있습니다. 이 변수의 값이 실제로 하드 코딩되어 있고 변경할 수 없다면 할 수있는 일은 없습니다.

다음과 같은 줄 :

$i = 76561197961384956;

항상 정밀도를 잃게됩니다. 모든 것을 유지 해야하는 경우 문자열에 저장하면 int로 저장할 수없고 모든 숫자를 유지할 수 없습니다.

다른 팁

나는 유일한 방법은 bcmath 기능.

임의의 정밀 수학의 경우 PHP는 문자열로 표시되는 모든 크기와 정밀도의 수를 지원하는 이진 계산기를 제공합니다.

이건 너의 $i 문자열 변환이 아닌 잘못입니다. PHP는 내부적으로 32 비트 int를 사용합니다.

현재 PHP에서 큰 정수 수학을 수행하는 방법만이 많은 수를 문자열로 처리하는 BCMATH 또는 GMP 확장을 사용하는 것입니다. 64 비트 정수는 PHP6에서 계획됩니다.

따라서 큰 정수를 사용하면 문자열에 캐스트되거나 할당에 대한 정밀도를 잃어 버린 다음 (자동 캐스트로 플로팅) 문자열 수학 라이브러리를 사용하여 숫자를 더 처리합니다.

PHP의 intval () 함수를 사용해 보셨습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top