IT TIP

통계 데이터를 저장할 때 DECIMAL, FLOAT 또는 DOUBLE이 필요합니까?

itqueen 2020. 11. 24. 20:45
반응형

통계 데이터를 저장할 때 DECIMAL, FLOAT 또는 DOUBLE이 필요합니까?


재미있게 만들고 있지만, 다양한 테스트를 진행하는 사이트 인 진지하게 접근하고 싶습니다. 이 테스트를 통해 통계 데이터를 수집하고 싶습니다.

일부 데이터에는 시간에 따른 테스트 완료율이 포함됩니다. 테스트의 백분율을 쉽게 계산할 수 있지만 완료시 테스트와 관련된 다양한 값을 저장하므로 실제 데이터가 반환되기를 바랍니다.

대부분의 값은 PHP 부동 소수점이므로 내 질문은 진정한 통계 데이터를 원한다면 MYSQL에 FLOAT, DOUBLE 또는 DECIMAL로 저장해야한다는 것입니다.

나는 같은 MYSQL 'S 기능을 활용하고자 AVG()하고 LOG10()뿐만 아니라으로 TRUNCATE(). MYSQL이 내가 삽입 한 값을 기반으로 실제 데이터를 반환하려면 데이터베이스 열 선택으로 무엇을 사용해야합니다.

10, 10.89, 99.09 또는 단순히 0과 같은 일부 숫자는 부동 소수점 일 수도 있고 아닐 수도 있기 때문에 묻습니다. 그러나 사실이고 유효한 통계 데이터가 반환되기를 바랍니다.

이를 위해 부동 소수점 수학을 사용할 수 있습니까?

편집하다

나는 이것이 일반적인 질문이라는 것을 알고 있으며 광범위하게 사과하지만 저와 같은 수학자가 아닌 경우에도 MYSQL 전문가가 아닙니다.이 분야의 전문가의 의견을 듣고 싶습니다.

조사를했지만 여전히이 문제에 대한 판단이 흐릿하다고 느낍니다. 내 질문이 주제에서 벗어 났거나이 사이트에 적합하지 않은 경우 다시 한 번 사과드립니다.


링크 는 당신이 찾고있는 것을 설명하는 좋은 역할을합니다. 내용은 다음과 같습니다.

이 세 가지 유형은 모두 다음 매개 변수 (크기, d)로 지정할 수 있습니다. 여기서 size는 문자열의 총 크기이고 d는 정밀도를 나타냅니다. 예를 들어 1234.567과 같은 숫자를 저장하려면 데이터 유형을 DOUBLE (7, 3)로 설정합니다. 여기서 7은 총 자릿수이고 3은 소수점 뒤의 자릿수입니다.

FLOAT 및 DOUBLE은 둘 다 부동 소수점 수를 나타냅니다. FLOAT는 단 정밀 도용이고 DOUBLE은 배정 밀도 숫자 용입니다. 0에서 23까지의 정밀도는 4 바이트 단 정밀도 FLOAT 열이됩니다. 24에서 53까지의 정밀도는 8 바이트 배정 밀도 DOUBLE 열이됩니다. FLOAT는 소수점 이하 7 자리, DOUBLE 최대 14 자리까지 정확합니다.

Decimal의 선언 및 기능은 Double과 유사합니다. 그러나 부동 소수점 값과 10 진수 (숫자) 값 사이에는 큰 차이가 하나 있습니다. DECIMAL 데이터 유형을 사용하여 정확한 숫자 값을 저장합니다. 여기서 정밀도가 아니라 정확하고 정확한 값을 원합니다. Decimal 유형은 소수점 이하 30 자리까지 최대 65 자리를 저장할 수 있습니다.

따라서 가장 정확하고 정확한 값을 얻으려면 Decimal이 가장 좋은 옵션입니다.


10 진수 데이터 (예 : 통화)를 저장하지 않는 한 표준 부동 소수점 유형 (FLOAT 또는 DOUBLE)을 사용해야합니다. DECIMAL은 고정 소수점 유형이므로 SUM과 같은 것을 계산할 때 오버플로 될 수 있으며 LOG10에 대해서는 엄청나게 부정확합니다.

이진 부동 소수점 유형에 대해 "덜 정확한"것은 없습니다. 사실 사용자의 요구에 대해 훨씬 더 정확하고 빠릅니다. DOUBLE로 이동하십시오.


간단히 말해서 Float와 double은 십진수만큼 정확하지 않습니다. 화폐 관련 숫자 입력 (통화 및 급여)에는 십진수를 권장합니다. 지적해야 할 또 다른 요점은 다음과 같습니다. "=", "<>"를 사용하여 부동 숫자를 비교하지 마십시오. 부동 숫자가 정확하지 않기 때문입니다.


십진수 : 고정 소수점 유형 ( 정확한 값). 돈과 같은 정확한 정밀도에 관심이있을 때 사용하십시오.

예 : salary DECIMAL(8,2), 8은 총 자릿수, 2는 소수 자릿수입니다. ~ salary의 범위에있을 것입니다.-999999.99999999.99


Float, Double : 부동 소수점 유형 ( 대략적인 값). Float는 4 바이트를 사용하여 값을 나타내고 Double은 8 바이트를 사용하여 값을 나타냅니다.

예 : percentage FLOAT(5,2), 10 진수 유형과 동일, 5는 총 자릿수이고 2는 소수 자릿수입니다. ~ percentage사이의 값을 저장합니다 .-999.99999.99

그들이 참고 대략 이 경우, 값 :

  • 같은 값 1 / 3.0 = 0.3333333...0.33(소수점 둘째 자리) 로 저장됩니다.
  • 같은 값은 다음과 같이 33.009저장됩니다 33.01(소수점 2 자리로 반올림).

Linger : 당신이 언급하고 인용 한 웹 사이트에는 나를 혼란스럽게하는 부정확 한 정보가 IMO에 있습니다. 문서에서 나는 float 또는 double을 선언 할 때 소수점이 실제로 숫자에 포함되지 않는다고 읽었습니다. 따라서 문자열의 문자 수가 아니라 모든 숫자가 사용됩니다.

문서 비교 : "DOUBLE PRECISION (M, D) .. 여기서,"(M, D) "는 값을 총 M 자리까지 저장할 수 있음을 의미하며,이 중 D 자리는 소수점 뒤에 올 수 있음) 예를 들어 , FLOAT (7,4)로 정의 된 열은 표시 될 때 -999.9999처럼 보입니다. " http://dev.mysql.com/doc/refman/5.1/en/floating-point-types.html

또한 오해의 소지가있는 명명법-문서에 따라 : M은 '정밀도'이고 D는 '규모'인 반면 웹 사이트는 '정밀도'를 위해 '규모'를 사용합니다.

나 같은 sb가 사진을 찍으려고 할 때 유용 할 것이라고 생각했습니다. 내가 틀렸다면 정정하십시오. 오래된 문서를 읽지 않았기를 바랍니다.)


Float 및 Double은 부동 소수점 데이터 유형입니다. 즉, 저장하는 숫자는 특정 자릿수까지만 정확할 수 있습니다. 예를 들어 float 유형의 열이있는 테이블의 경우 7.6543219저장하면 7.65432. 마찬가지로 Double데이터 유형은 값에 근접하지만 Float.

Decimal데이터 유형 의 열이있는 테이블을 생성 할 때 저장할 총 자릿수와 소수점 이하 자릿수를 지정하고 저장 한 숫자가 지정한 범위 내에 있으면 정확히 저장됩니다.

정확한 값을 저장 Decimal하려면 고정 데이터 유형이라고합니다.

참고 URL : https://stackoverflow.com/questions/19601975/storing-statistical-data-do-i-need-decimal-float-or-double

반응형