Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 1
  • 163

Typ decimal jest dokładny jak typy int i long i jednocześnie może służyć do przechowywania liczb ułamkowych. Wydaje się on łączyć zalety typów dokładnych i typów służących do reprezentowania liczb zmiennoprzecinkowych w pewnym przybliżeniu. Czy  typ decimal ma więc jakieś wady? Kiedy powinienem unikać tego typu?

Michał_Szot
  • Zapytał
  • @ Michał_Szot | 30.03.2015
    • 5
    • 0
    • 2
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 0

Decimal dzięki swoim zaletom (opisanym w pytaniu) jest szeroko stosowany m.in. w oprogramowaniu finansowym. Podstawową wadą typu decimal jest brak wsparcia sprzętowego równie powszechnego jak dla typu double. W praktyce oznacza to, że w wielu sytuacjach złożone obliczenia (np. naukowe) będą realizowane szybciej na typie double. Zastosowanie double zamiast decimal znalazło odzwierciedlenie w postaci wielu właściwości platformy WPF wymagających efektywnego przetwarzania (np. w animacjach).
Dla zobrazowania problemu można uruchomić prosty test dla typu decimal i double:

 

using System;
using System.Diagnostics;

    class Program
    {
        static void Main(string[] args){
            Console.WriteLine("Testing Double");
            for (int i = 0; i < 4; i++){
                DoubleTest();
            }
            Console.WriteLine("Testing Decimal");
            for (int i = 0; i < 4; i++){
                DecimalTest();
            }

        }

        private static void DoubleTest(){
            Stopwatch s = new Stopwatch();
            s.Start();
            double d = 0;
            double max = 10000000.0;
            for (double i = 0; i < max; i++){
                d = max - i % 10;
            }
            s.Stop();
            Console.WriteLine(s.Elapsed);
        }

        private static void DecimalTest(){
            Stopwatch s = new Stopwatch();
            s.Start();
            decimal d = 0;
            decimal max = 10000000.0M;
            for (decimal i = 0; i < max; i++){
                d = max - i % 10;
            }
            s.Stop();
            Console.WriteLine(s.Elapsed);
        }
    }

 

  • Odpowiedział
  • @ | 31.03.2015
  • TRENER ALTKOM AKADEMII