CodeGym /행동 /C# SELF /소수와 double 타입 소개

소수와 double 타입 소개

C# SELF
레벨 6 , 레슨 2
사용 가능

1. 소수

우리 프로젝트를 다시 떠올려보자 — 예를 들어, 이건 아주 간단한 계산기라고 치자. 아니면 계산이 필요한 아무 프로그램(돈 계산부터 복잡한 물리까지). 현실 세계에서 모든 게 정수는 아니잖아, 어쩔 수 없어!

그러니까 이제 새로운 데이터 타입을 써보자!

프로그래밍에서 소수는 실수 또는 부동 소수점 숫자(floating-point)라고도 불러. C#에서도 그렇고, 대부분의 언어에서 이 타입은 정수뿐만 아니라 "소수" 값도 저장할 수 있어: 3.14, -28.57, 2.718281828 같은 거 말이지...

실수(소수)는 두 가지 주요 타입이 있어:

타입 저장하는 값 값의 범위 (대략) 정밀도 일반적인 크기
float
숫자 ±1.5 × 10-45 ... ±3.4 × 1038 소수점 이하 약 7자리 4 바이트
double
숫자 ±5.0 × 10-324 ... ±1.7 × 10308 소수점 이하 약 15-16자리 8 바이트

float 타입

float 타입은 floating-point number에서 이름이 왔어 — 부동 소수점 숫자라는 뜻이지. 수학에서 실수는 여러 성질이 있지만, 컴퓨터는 제한이 많아. 그래서 C#에서 소수를 실수라고 부르는 건 완전히 정확하진 않아. 그냥 "부동 소수점 숫자"라고 하는 게 맞아.

float 타입은 보통 7자리 정도의 유효 숫자(예: 0.1234567), 10의 지수, 그리고 4 바이트 메모리를 써. 이건 정확한 계산에는 너무 부족해서, 다들 금방 double(두 배 정밀도)로 넘어가.

2. double 타입 변수 선언과 초기화

int랑 똑같이 하면 돼 — 이제 double만 쓰면 돼.

// 변수 선언하고 파이 값 할당
double pi = 3.1415926;

// 초기화 없이 선언도 가능
double averageSalary;
averageSalary = 91234.56;

// 계산도 가능!
double pizzaPieces = 8;
double friends = 3;
double piecesPerFriend = pizzaPieces / friends; // 2.666... (2가 아님)

문법 특징:

  • 소수점 구분자로 (3.14)을 써야 해. 쉼표 쓰면 컴파일 에러 나!
  • 사실 double d = 3; 이렇게 써도 에러 안 나 — 타입이 자동 변환돼(정수가 "실수"로 손실 없이 바뀜).

3. Console로 실수 입력과 출력

먼저 소수 출력부터 해보자:

double amount = 42.75;
Console.WriteLine(amount); // 출력: 42.75

좋아! 텍스트도 붙여보면:

Console.WriteLine("네 계좌에: " + amount + " 유로."); // 네 계좌에: 42.75 유로.

키보드 입력

중요한 점: Console.ReadLine()은 항상 문자열을 반환하니까, double로 변환해줘야 해.

Console.WriteLine("밖 온도를 입력하세요:");
string input = Console.ReadLine();
double temperature = double.Parse(input); // 문자열을 double로 변환

Console.WriteLine("지금 밖은: " + temperature + " 도야.");

4. double 타입 실전: 연산

익숙한 연산자(+, -, *, /)는 int랑 똑같이 써:

double distance = 100.5;
double time = 2.0;
double speed = distance / time; // 50.25

Console.WriteLine("평균 속도: " + speed); // 평균 속도: 50.25

연산은 이게 다야. 딱 한 가지 차이점: 피연산자 중 하나라도 double이면, 결과는 항상 소수야.

int와 비교

int a = 5, b = 2;
Console.WriteLine(a / b); // 2 (나머지는 버림)

double aa = 5, bb = 2;
Console.WriteLine(aa / bb); // 2.5

5. double 쓸 때 흔한 실수와 이상한 점

문자열 변환 에러

이건 진짜 자주 나오는 상황: 사용자가 3,14를 입력하는데, 프로그램은 3.14를 기대하고 있어.

// "3,14" 입력하면 에러남
double value = double.Parse(Console.ReadLine());

만약 쉼표가 소수점 구분자인 나라(예: 폴란드, 독일)에서 프로그램을 돌리면 double.Parse가 잘 동작해. 근데 "영어" 설정으로 실행하면 점을 써야 해.

컴퓨터에서 숫자 "부정확함" 에러

여기서 초보자들이 보통 당황하지:

double x = 0.1 + 0.2;
Console.WriteLine(x); // 음... 0.30000000000000004

축하해, 이제 컴퓨터 내부에서 소수가 어떻게 저장되는지의 "마법"을 만난 거야. 어떤 숫자는 2진수로 정확히 표현이 안 돼서 그래. 이건 다음 강의에서 더 자세히 다룰 거고, 지금은 걱정하지 마! 대부분의 앱에서는 별 문제 없지만, 금융이나 과학 계산에서는 신경 써야 해.

6. 중요: doubleint — 자동 변환과 명시적 변환

정수랑 소수를 더하거나, intdouble 변수에 넣어도 에러 안 나:

int i = 2;
double d = i; // 문제 없음!
Console.WriteLine(d); // 2

double dd = 3.7;
int ii = (int) dd; // double을 int로 명시적으로 변환해야 해!
Console.WriteLine(ii); // 3, 소수점 이하는 버림

이게 의외로 헷갈릴 수 있어 — 왜 변환하면 소수점 이하가 사라지지? int 타입은 소수를 저장 못 하니까(점 뒤는 영원히 사라짐).

doubleint로 변환하는 법과 (int) 연산자는 다음 강의에서 더 자세히 다룰게.

7. 포맷팅해서 double 예쁘게 출력하기

보통 double을 그냥 출력하면 쓸데없는 0이 많이 붙어. 출력 포맷을 지정할 수 있어:

double temp = 23.56789;
Console.WriteLine(temp); // 23.56789

Console.WriteLine(temp.ToString("F2")); // 23.57 (소수점 이하 2자리)
Console.WriteLine($"{temp:F1}");        // 23.6 (문자열 보간)
포맷 결과 설명
"F0" 24 소수점 없음
"F2" 23.57 소수점 이하 두 자리
"F5" 23.56789 소수점 이하 다섯 자리
2
과제
C# SELF, 레벨 6, 레슨 2
잠금
double 타입을 사용한 간단한 산술 연산
double 타입을 사용한 간단한 산술 연산
2
과제
C# SELF, 레벨 6, 레슨 2
잠금
속도 계산
속도 계산
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION