2012-02-06 1 views
6

바라건대 간단한 질문입니다. 내 데이터베이스에 DECIMAL 열이 있습니다. 값은 매우 작은 소수입니다. 모든 행에 대해이 값을 합하면 1이됩니다.PHP에서 MySQL Decimal 데이터 유형을 사용해야하는 방법은 무엇입니까?

이제이 값을 PHP 응용 프로그램에서 사용하고 표시하고 계산을 수행 한 다음 다시 저장합니다. 데이터 베이스.

PHP는 integer과유형 만 가지고 있기 때문에 계산이나 표시의 정확성을 잃지 않도록 php에서 그 값을 사용하는 가장 좋은 방법은 무엇입니까?

  • 는 문자열로 값을 유지하고 계산을 위해 BC 수학을 사용
  • 캐스트 float로 수 - 내가 PHP를 수레가 좋은 숫자로 정확하게 알고
  • 가 값을 변환 (운영 체제에 따라 다름) 지수를 기억하는 함수를 사용하는 정수
  • 다른 것?

감사

당신은 계산 정밀도를 잃고 표시 number_format 출력을 사용하지 float 가야
+0

문자열로 유지하면 정확도가 유지되지만 일단 수학을 시작하면 모든 베팅이 해제됩니다. –

+3

[BC Math] (http://www.php.net/manual/en/intro.bc.php) –

답변

0

...

주 :
그것은 당신의 필요에 따라 정말 및 방법을 두 번째 숫자 뒤에 가수를 자르거나 어떤 종류의 반올림을하려면 출력을 처리해야합니다. : (단지 SELECT CAST(2.10/1.10 as DECIMAL(10,2)) 같은 결과를 반올림) 1.91가 발생합니다

업데이트를 number_format(2.10/1.10, 2)를 사용하는 예를 2.10/1.10에 대한 규모 2 BC 수학의 사용과

1.90을 생산하고 있습니다. 의견에서 언급 한 바와 같이 계산의 정확성을 잃을 수도 있습니다. MySQL 자체에서 임의 정밀도 계산을하는 것이 더 좋을 것이므로 수학 연산 중에 아무 것도 풀리지 않았는지 확인할 수 있습니다.

+0

왜, 어떻게 될지, 장단점은 무엇입니까? –

+1

@Bendos가 임의 정밀도 산술을 원한다면 부동 소수점 숫자를 사용하는 것은 좋은 생각이 아닙니다. 계산의 단계에서 부동 소수점 형식으로 표현할 수없는 숫자가 포함될 경우 정밀도가 손실됩니다. – Hammerite

+0

@Hammerite, 감사합니다. 이 질문에 대한 답변을 업데이트했습니다. –