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.
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 tipi çok eskiden beri var. Açıklaması şöyle.
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.For what it's worth, the decimal type seems to predate .net. The .net framework CLR delegates the computations to the oleaut32 lib, and I could find traces of the DECIMAL type as far back as Windows 95decimal ve double Karşılaştırması
decimal 128 bit olmasına rağmen double'dan daha küçük bir aralık kullanır.
Literal
Örnek
Şöyle yaparız.
Şöyle yaparız
Şöyle yaparız.
Bir integer dizisi döner. Dizi şöyledir.
Şöyle yaparız.
İmzası şöyle
Elimizde şöyle bir kod olsun. Çarpma işlemi decimal döner. Bölme işlemi de decimal döner. Sonuç decimal tipindendir.
Şöyle yaparız.
Precision kavramı decimal precision ile karıştırılmamalı. Toplam kaç hane saklayabileceği anlamına gelir. Örnekte sayı toplam 10 hane kullanıyor.
Açıklaması şöyle.
Açıklaması şöyle.
Eksi sayısı temsil edern string'i parse etmek için şöyle yaparız.
Yuvarlama
Decimal şöyle yuvarlanabilir ancak ben bu yöntemi sevmiyorum çünkü ardışuk aritmetik işlemlerde para kaybına sebep oluyor.
decimal sum = 0M;
ÖrnekŞöyle yaparız
(365m / 360m);
Floor metoduŞöyle yaparız.
decimal d1 = 9.7m;
decimal d2 = decimal.Floor(d1);
GetBits metoduBir 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);
ÖrnekElimizde şö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 metoduPrecision 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 metoduAçıklaması şöyle.
Şöyle yaparız.If format is null or an empty string, the return value of this instance is formatted with the general numeric format specifier (G).
number.ToString("G");
TryParse metoduAçıklaması şöyle.
ÖrnekWhen this method returns, contains the Decimal number that is equivalent to the numeric value contained in s, if the conversion succeeded, or zero if the conversion failed. The conversion fails if the s parameter is null or Empty, is not a number in a valid format, or represents a number less than MinValue or greater than MaxValue. This parameter is passed uininitialized; any value originally supplied in result is overwritten.
Eksi sayısı temsil edern string'i parse etmek için şöyle yaparız.
decimal validity = -1;
var validityStr = "-1";
decimal.TryParse(validityStr,
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out validity);
DiğerYuvarlama
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