PostgreSQL이 내 전체 (PHP) 플로트 값을 저장하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1112016

문제

PHP 플로팅 포인트 값 63.59072952118762를 Postgres의 이중 정밀 열로 저장하려고합니다. Postgres는 값을 63.59073으로 저장합니다. 왜 그런지 아는 사람이 있습니까? 8 바이트는 그 가치에 대해 충분해야합니다. 데이터 유형 숫자로 시도했는데 정밀도를 지정할 때 작동하지만 실제로는 필요하지 않습니다.

업데이트: 63.5907295를 저장하려고 할 때도 동일한 문제가 존재하므로 저장되기 전에 두 배로 발생한다는 제안은 현실적으로 보입니다.

업데이트 II (부분적으로 해결): 이중 매개 변수를 할당하는 줄은 다음과 같습니다.

$stmt->bindParam(4, $this->latitude);

내가 몰랐던 것은 pdo가 매개 변수 유형을 string으로 기본으로한다는 것입니다. 더 나은 대안이 부족하여 PDO :: Param Int로 변경했으며 (Param Double은 옵션이 아니 었습니다) Postgres에 저장된 이중에서 10 자리 정밀도를 얻었습니다 (적어도 일부 진행). 숫자 유형이 잘 작동하는지 확인 했으므로 PDO를 사용할 때 숫자가 갈 수있는 방법 인 것 같습니다.

어쨌든, 누군가가 언급했듯이, 나는 이런 종류의 정밀도를 가져야한다는 것이 필수인지 모르겠지만, 그 자체로 문제가 조사 될 가치가 있다고 생각합니다.

도움이 되었습니까?

해결책

  • PostgreSQL이 저장하고있는 PostgreSQL을 어떻게 결정합니까?
  • 데이터를 PostgreSQL로 어떻게 보내나요?
  • 데이터를 어떻게 다시 받습니까?
  • 어떻게 표시합니까?
  • 데이터베이스의 열은 어떤 유형입니까?

PHP와 PostgreSQL 사이의 경로에는 데이터를 표현하는 방법에 대한 혼란이있을 수있는 많은 장소가 있습니다.


데이터가 DBM에 삽입되는 방법을 설명하는 것이 중요합니다. 삽입 문에 문자 값을 사용하면 바운드 매개 변수를 사용하는 것과는 다른 문제가 있습니다. SQL에 값을 썼다면 :

INSERT INTO SomeTable(SomeColumn) VALUES(63.xxxxxxxxx);

그리고 데이터가 잘 렸습니다. PostgreSQL에서 문제가 발생할 수 있습니다. 변수를 바인딩하는 경우 PHP 및 PDO PostgressQL 모듈이 값으로 수행하는 작업을 이해해야합니다. 이는 두 배나 문자열로 전송되며 어떤 코드가 변환과 관련이 있는지 확인해야합니다.

Perl + DBI + DBD :: Yourdbms (DBD :: PG)와 유사한 문제가 발생합니다.

다른 팁

사용 고려하십시오 소수/숫자 많은 정밀도가 필요한 경우 입력하십시오

PostgreSQL은 실제 유형을 선택하는 플로트 (1) to float (24)를 허용하고, float (25)는 플로트 (53)는 이중 정밀도를 선택합니다.

대부분의 플랫폼 PG에서 실제 유형의 범위는 최소 6 자리 숫자의 정밀도로 최소 1E-37 ~ 1E+37입니다. 이중 정밀 유형은 일반적으로 약 1e-307 ~ 1E+308의 범위를 가지며 정밀도는 15 자리 이상입니다.심판)

어느 것을 사용합니까?

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