ТЕМА 4: РЕАЛЕН ТИП ДАННИ

 

1. Реални типове данни

 

а) реални типове с плаваща запетая

Реалните типове в C# представляват реалните числа, които познаваме от математиката. Те се представят чрез плаваща запетая (floating-point) и са float и double.

Разгледаните реални типове в C# float и double се различават освен с порядъка на възможните стойности, които могат да заемат, и по точност (броят десетични цифри, които запазват). Първият тип има точност 7 знака, вторият – 15-16 знака.

float

0.0f

±1.5×10-45

±3.4×1038

double

0.0d

±5.0×10-324

±1.7×10308

 

б) реални типове с десетична точност

В C# се поддържа т. нар. десетична аритметика с плаваща запетая (decimal floating-point arithmetic), при която числата се представят в десетична, а не в двоична бройна система и така не се губи точност при записване на десетично число в съответния тип с плаваща запетая.

Типът данни за реални числа с десетична точност в C# е 128-битовият тип decimal. Той има точност от 28 до 29 десетични знака.

 

decimal

0.0m

±1.0×10-28

±7.9×1028

 

Пресмятанията извършвани над числа с плаваща „.” са свързани с нееднократни закръгляния на стойности, което води до неточни резултати. Типът decimal премахва тези грешки, тази възможност за представяне на десетични стойности без грешки е полезна при финансови разчети.

 Пример за пресмятане на баланс след начисляване на лихва.

Пример 1:

decimal balance, rate;

balance=1000.10m;

rate = 0.1m;

balance*=rate;

Ще отбележим, че след десетичните const от тип decimal трябва да следва суфикс „M” или „m”, иначе ще се интерпретират като константи с плаваща точка и няма да са съвместими с decimal.

decimal е уникален в C#, такъв тип данни няма в C/C++.

2. Примери и задачи

Пример 2:

float floatPI = 3.141592653589793238f;

double doublePI = 3.141592653589793238;

// Float PI is: 3.141593

// Double PI is: 3.14159265358979

 

 

Пример 3:

Да се изчертаят 4 командни бутона и 3 етикета.

При кликване върху button1, в label1 да се изведе дали в типа float сумата на десет числа със стойност  0.1 е 1.0.

При кликване върху button2, в label2 да се изведе дали в типа double сумата на десет числа със стойност  0.1 е 1.0.

При кликване върху button3, в label3 да се изведе дали в типа decimal сумата на десет числа със стойност  0.1 е 1.0.

При кликване върху button4, да се излезе от приложението.

Да се поставят подходящи надписи върху командните бутони.

 

  private void button1_Click(object sender, EventArgs e)
        {
            float sum=0.0f;
            sum=0.1f+0.1f+0.1f+0.1f+0.1f+0.1f+0.1f+0.1f+0.1f+0.1f;
            float sum1 = 1.0f;
            bool equal = (sum == sum1);
            label1.Text = Convert.ToString(equal);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            double sum=0.0;
            sum = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1;
            double sum1 = 1.0;
            bool equal = (sum == sum1);
            label2.Text = Convert.ToString(equal);
        
        }

        private void button3_Click(object sender, EventArgs e)
        {

            decimal sum = 0.0M;
            sum = 0.1M + 0.1M+0.1M + 0.1M+0.1M + 0.1M+0.1M + 0.1M+0.1M + 0.1M;

            decimal sum1 = 1.0M;
            bool equal = (sum == sum1);
            label3.Text = Convert.ToString(equal);
        }

        private void button4_Click(object sender, EventArgs e)
        {
           Environment.Exit(0);
        }

Пример 4:

Най-често се използва тип double, една от причините е че много математически функции от .NET Framework ползват стойности от тип double – примерно sqrt() определен в System.Math;

Пресмятане на хипотенуза с sqrt:

  private void button1_Click(object sender, EventArgs e)

    {

        double x, y, z;

        x = 3;

        y = 4;

        z = Math.Sqrt(x * x + y * y);

     label1.Text="Дължината на хипотенузата е равна на: " + z;

    }

 

Тук името на методът sqrt е отделено с „.” от името на класа Math.

 

Задача 1:

Като се използва методa  PI  от класа Math да се пресметне лице  и периметър на окръжност. ( S=Math.PI * r * r;  P=2*Math.PI*r; )

Търсене