메인 콘텐츠로 건너뛰기
정확한 계산이 필요하고, 특히 높은 정밀도가 요구되는 금융 또는 비즈니스 데이터를 다루는 경우에는 Decimal 사용을 고려하십시오.아래 예시에서 보듯이 부동소수점 수는 부정확한 결과를 초래할 수 있습니다.
CREATE TABLE IF NOT EXISTS float_vs_decimal
(
   my_float Float64,
   my_decimal Decimal64(3)
)
ENGINE=MergeTree
ORDER BY tuple();

# 소수점 이하 2자리 난수 1,000,000개를 생성하여 float와 decimal로 저장합니다
INSERT INTO float_vs_decimal SELECT round(randCanonical(), 3) AS res, res FROM system.numbers LIMIT 1000000;
SELECT sum(my_float), sum(my_decimal) FROM float_vs_decimal;

┌──────sum(my_float)─┬─sum(my_decimal)─┐
499693.60500000004499693.605
└────────────────────┴─────────────────┘

SELECT sumKahan(my_float), sumKahan(my_decimal) FROM float_vs_decimal;

┌─sumKahan(my_float)─┬─sumKahan(my_decimal)─┐
499693.605499693.605
└────────────────────┴──────────────────────┘
ClickHouse와 C에서 대응되는 타입은 다음과 같습니다.
  • Float32float.
  • Float64double.
ClickHouse의 Float 타입에는 다음과 같은 Aliases가 있습니다.
  • Float32FLOAT, REAL, SINGLE.
  • Float64DOUBLE, DOUBLE PRECISION.
테이블을 생성할 때 부동소수점 수에 대한 숫자 매개변수를 지정할 수 있지만(예: FLOAT(12), FLOAT(15, 22), DOUBLE(12), DOUBLE(4, 18)), ClickHouse는 이를 무시합니다.

부동소수점 수 사용

  • 부동소수점 수를 사용한 계산에서는 반올림 오류가 발생할 수 있습니다.
SELECT 1 - 0.9

┌───────minus(1, 0.9)─┐
0.09999999999999998
└─────────────────────┘
  • 계산 결과는 계산 방식(컴퓨터 시스템의 프로세서 유형과 아키텍처)에 따라 달라집니다.
  • 부동소수점 계산에서는 무한대(Inf) 및 “숫자가 아님”(NaN)과 같은 값이 나올 수 있습니다. 계산 결과를 처리할 때는 이 점을 고려해야 합니다.
  • 텍스트에서 부동소수점 수를 파싱할 때, 결과가 기계에서 표현 가능한 가장 가까운 숫자가 아닐 수 있습니다.

NaN 및 Inf

표준 SQL과 달리 ClickHouse는 다음과 같은 부동소수점 수 범주를 지원합니다.
  • Inf – 무한대입니다.
SELECT 0.5 / 0

┌─divide(0.5, 0)─┐
│            inf │
└────────────────┘
  • -Inf — 음의 무한대입니다.
SELECT -0.5 / 0

┌─divide(-0.5, 0)─┐
-inf │
└─────────────────┘
  • NaN — 숫자가 아닙니다.
SELECT 0 / 0

┌─divide(0, 0)─┐
│          nan │
└──────────────┘
ORDER BY 절 섹션에서 NaN 정렬 규칙을 확인하십시오.

BFloat16

BFloat16은 8비트 지수부, 1비트 부호, 7비트 가수로 구성된 16비트 부동소수점 데이터 타입입니다. 머신 러닝 및 AI 애플리케이션에 유용합니다. ClickHouse는 Float32BFloat16 간의 변환을 지원하며, 이 변환은 toFloat32() 또는 toBFloat16 함수를 사용해 수행할 수 있습니다.
대부분의 다른 연산은 지원되지 않습니다.
마지막 수정일 2026년 6월 10일