CodeGym /Kurslar /C# SELF /Ondalık ədədlərə və double tipinə giriş

Ondalık ədədlərə və double tipinə giriş

C# SELF
Səviyyə , Dərs
Mövcuddur

1. Ondalık ədədlər

Gəlin layihəmizi yada salaq — tutalım, bu ən sadə kalkulyatordur. Və ya hesablama lazım olan istənilən proqram (sadə pul hesablamasından tutmuş mürəkkəb fizikaya qədər). Real həyatda hər şey tam ədəd deyil, və bunun qarşısını almaq olmur!

Ona görə də gəlin yeni data tipi ilə silahlanırıq!

Proqramlaşdırmada ondalık ədədlərə bir də həqiqi ədədlər və ya üzən nöqtəli ədədlər (floating-point) deyirlər. C#-da, eləcə də əksər dillərdə, onlar yalnız tam deyil, həm də "ondalık" dəyərləri saxlamaq üçündür: məsələn 3.14, -28.57, 2.718281828 və s...

Həqiqi ədədlər iki əsas tipdə olur:

Tip Nə saxlayır Dəyərlər aralığı (təxmini) Dəqiqlik Tipik ölçü
float
Ədədlər ±1.5 × 10-45 ... ±3.4 × 1038 ~7 vergüldən sonra rəqəm 4 bayt
double
Ədədlər ±5.0 × 10-324 ... ±1.7 × 10308 ~15-16 vergüldən sonra rəqəm 8 bayt

float tipi

float tipi adını floating-point number-dan alıb — üzən nöqtəli ədəd. Həqiqi ədədlər — riyaziyyatda olan ədədlərdir, onların müəyyən xüsusiyyətləri var. Amma kompüterdə bir çox məhdudiyyətlər var. Ona görə də C#-da ondalık ədədləri həqiqi ədəd adlandırmaq tam düzgün deyil. Onlar üçün "üzən nöqtəli ədəd" adı istifadə olunur.

float tipi adətən 7 əhəmiyyətli rəqəm saxlayır (məsələn 0.1234567), onluq dərəcəsi və yaddaşda 4 bayt tutur. Bu, dəqiq hesablamalar üçün çox azdır, ona görə də hamı tez bir zamanda ikiqat dəqiqlikli ədədlərə keçdi.

2. double tipli dəyişənlərin elan və inisializasiyası

Hər şey int kimi — sadəcə indi double istifadə edirik.

// Dəyişəni elan edirik və ona Pi dəyəri veririk
double pi = 3.1415926;

// Elansız da elan etmək olar
double averageSalary;
averageSalary = 91234.56;

// Hesablamaq da olar!
double pizzaPieces = 8;
double friends = 3;
double piecesPerFriend = pizzaPieces / friends; // 2.666... (yəni 2 yox)

Syntax xüsusiyyətləri:

  • Onluq ayırıcı kimi nöqtə (3.14) istifadə olunur. Əgər vergül istifadə etsən — kompilasiya səhvi alacaqsan!
  • Düzünü desək, double d = 3; yazsan, səhv almayacaqsan — tiplər avtomatik çevriləcək (tam ədəd "həqiqi"yə problemsiz çevrilir).

3. Console ilə həqiqi ədədlərin daxil və çıxışı

Əvvəlcə ondalık ədəd çıxarmağa çalışaq:

double amount = 42.75;
Console.WriteLine(amount); // Çıxacaq: 42.75

Hər şey qaydasındadır! Bəs mətn əlavə etsək:

Console.WriteLine("Sənin hesabında: " + amount + " avro."); // Sənin hesabında: 42.75 avro.

Klaviaturadan daxil etmə

Əsas incəlik: Console.ReadLine() həmişə string qaytarır, onu double tipinə çevirmək lazımdır.

Console.WriteLine("Çöldə temperaturu daxil et:");
string input = Console.ReadLine();
double temperature = double.Parse(input); // String-i double-a çeviririk

Console.WriteLine("Çöldə indi: " + temperature + " dərəcə.");

4. double tipi işdə: arifmetika

Bütün tanış əməliyyatlar (+, -, *, /) int kimi işləyir:

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

Console.WriteLine("Orta sürət: " + speed); // Orta sürət: 50.25

Bax belə arifmetika. Yeganə fərq: bölmənin nəticəsi — həmişə ondalık ədəd olur, əgər operandlardan biri doubledirsə.

int ilə müqayisə

int a = 5, b = 2;
Console.WriteLine(a / b); // 2 (qalıq atılır)

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

5. double ilə işləyərkən tipik səhvlər və qəribəliklər

String çevirmə səhvi

Klassik vəziyyət: istifadəçi 3,14 daxil edir — proqram isə 3.14 gözləyir.

// Əgər "3,14" daxil edilsə, bu səhv verəcək
double value = double.Parse(Console.ReadLine());

Əgər proqramı vergülün tam və onluq hissəni ayırdığı ölkələrdə işlədərsənsə (məsələn, Polşa, Almaniya), double.Parse normal işləyir. Amma əgər tətbiq "ingilis" ayarlarında işləyirsə, nöqtə gözləyir.

Kompüterdə ədədlərin "dəqiqlik" səhvi

Burada adətən yeni başlayanlar bir az çaşqınlıq yaşayır:

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

Təbrik edirəm, sən artıq kompüterdə ondalık ədədlərin "sehrinə" rast gəldin. Məsələ ondadır ki, bir çox ədədləri ikilik sistemdə dəqiq göstərmək mümkün deyil. Bu barədə növbəti dərsdə daha ətraflı danışacağıq, indi isə — panik etmə! Bu, adətən əksər tətbiqlər üçün kritik deyil, amma maliyyə və dəqiq elmlərdə nüanslar var.

6. Vacibdir: doubleint — avtomatik və açıq çevirmə

Bəzən tam və ondalık ədədi topladıqda və ya int dəyişəni double-a mənimsədikdə — səhv olmayacaq:

int i = 2;
double d = i; // Hər şey ok!
Console.WriteLine(d); // 2

double dd = 3.7;
int ii = (int) dd; // double tipini int tipinə açıq çevirmək lazımdır!
Console.WriteLine(ii); // 3, ondalık hissə atıldı

Bu tez-tez gözlənilməz olur — niyə çevirmədən sonra ondalık hissə yox oldu? Sadəcə ona görə ki, int tipi ondalık saxlaya bilmir (nöqtədən sonrakı hər şey həmişəlik itdi).

double-dan int-ə çevirmə və (int) operatoru barədə növbəti dərsdə daha ətraflı danışacağıq.

7. Formatlaşdırılmış çıxış: double-u gözəl çıxarırıq

Çox vaxt default olaraq double bir yığın lazımsız sıfırla çıxır. Çıxışı formatlaşdırmaq olar:

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

Console.WriteLine(temp.ToString("F2")); // 23.57 (vergüldən sonra 2 rəqəm)
Console.WriteLine($"{temp:F1}");        // 23.6 (string interpolasiyası)
Format Nəticə Təsvir
"F0" 24 Ondalık hissə olmadan
"F2" 23.57 Vergüldən sonra iki rəqəm
"F5" 23.56789 Vergüldən sonra beş rəqəm
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION