1 Kasım 2018 Perşembe

decimal tipi

decimal tipi
128 bit limited precision sağlar. 28-29 haneye tekabül eder. Bu sınıf tamamen para hesaplaması için icat edilmiştir.
decimal: 0.3333333333333333333333333333 - Toplam 28 hane, sıfır hariç
decimal ve double Karşılaştırması
decimal 128 bit olmasına rağmen double'dan daha küçük bir aralık kullanır.

Literal
Literal olarak kullanırken rakamın sonuna büyük M veya küçük m  koyarız.
Örnek
Şöyle yaparız.
decimal sum = 0M;
Örnek
Şöyle yaparız
(365m / 360m);
Floor metodu
Şöyle yaparız.
decimal d1 = 9.7m;
decimal d2 = decimal.Floor(d1);
GetBits metodu
Bir integer dizisi döner. Dizi şöyledir.
public static int[] GetBits(decimal d)
{
    return new int[]
    {
        d.lo,
        d.mid,
        d.hi,
        d.flags
    };
}
Flags alanının 16-23 arasındaki alanı "number of fractional decimal digits" bilgisini taşır. Mask olarak bence 0xFF (8 bit) kullanılmalı ancak bazı örneklerde 0x7F'te kullanılıyor.
decimal x = 12345.67890M;
int[] bits = decimal.GetBits(x);
byte scale = (byte) ((bits[3] >> 16) & 0xFF); 
operator + metodu
Şöyle yaparız.
decimal sum = 0M;
sum += 0.001M;
operator * metodu
İmzası şöyle
decimal operator *(decimal x, decimal y);
Örnek
Elimizde şöyle bir kod olsun. Çarpma işlemi decimal döner. Bölme işlemi de decimal döner. Sonuç decimal tipindendir.
sum * (365 / 360)
Örnek
Şöyle yaparız.
decimal quantityList = ...;
decimal price = ...;
decimal multipleProduct = price * quantity;
Remainder metodu
Şöyle yaparız.
decimal d1 = 9.7m;
decimal d2 = 6.3m;decimal fractional1 = decimal.Remainder(d1, decimal.Floor(d1));
Çıktı olarak şunu alırız.
.7
Precision metodu
Precision kavramı decimal precision ile karıştırılmamalı. Toplam kaç hane saklayabileceği anlamına gelir. Örnekte sayı toplam 10 hane kullanıyor.
var number = 12345.67890M;
var precision = number.Precision();
Assert.IsTrue(precision == 10);
ToString metodu
Açıklaması şöyle.
If format is null or an empty string, the return value of this instance is formatted with the general numeric format specifier (G).
Şöyle yaparız.
number.ToString("G");
Diğer
Yuvarlama
Decimal şöyle yuvarlanabilir ancak ben bu yöntemi sevmiyorum çünkü ardışuk aritmetik işlemlerde para kaybına sebep oluyor.
decimal sum = 10.1234M;
sum = Math.Round(sum, 3);
En güzeli sonucu yuvarlayarak göstermek. Şöyle yaparız.
Console.WriteLine("Sum: {0:F3}", sum);

Hiç yorum yok:

Yorum Gönder