Kayan nokta sayısal türleri (C# başvurusu)
Kayan noktalı sayısal türler gerçek sayıları temsil gösterir. Tüm kayan nokta sayısal türleri değer türleridir. Bunlar ayrıca basit türlerdir ve değişmez değerlerle başlatılabilir. Tüm kayan noktalı sayısal türler aritmetik, karşılaştırma ve eşitlik işleçlerini destekler.
Kayan nokta türlerinin özellikleri
C# aşağıdaki önceden tanımlanmış kayan nokta türlerini destekler:
C# türü/anahtar sözcüğü | Yaklaşık aralık | Duyarlık | Size | .NET türü |
---|---|---|---|---|
float |
±1,5 x 10−45 ile ±3,4 x 1038 | ~6-9 basamak | 4 bayt | System.Single |
double |
±5,0 × 10−324 ile ±1,7 × 10308 | Yaklaşık 15-17 basamak | 8 bayt | System.Double |
decimal |
±1.0 x 10-28 to ±7.9228 x 1028 | 28-29 basamak | 16 bayt | System.Decimal |
Yukarıdaki tabloda, en soldaki sütundaki her C# türü anahtar sözcüğü, karşılık gelen .NET türü için bir diğer addır. Bunlar değiştirilebilir. Örneğin, aşağıdaki bildirimler aynı türdeki değişkenleri bildirir:
double a = 12.3;
System.Double b = 12.3;
Her kayan nokta türünün varsayılan değeri sıfırdır 0
. Kayan nokta türlerinin her biri, bu türün MinValue
en düşük ve en yüksek sonlu değerini sağlayan ve MaxValue
sabitlerine sahiptir. float
ve double
türleri, sayı olmayan ve sonsuz değerleri temsil eden sabitler de sağlar. Örneğin, double
türü şu sabitleri sağlar: Double.NaN, Double.NegativeInfinityve Double.PositiveInfinity.
Gerekli decimal
duyarlık derecesi ondalık noktasının sağındaki basamak sayısına göre belirlendiğinde tür uygundur. Bu tür sayılar finansal uygulamalarda, para birimi tutarları (örneğin, 1,00 TL), faiz oranları (örneğin, %2,625 vb.) için yaygın olarak kullanılır. Yalnızca bir ondalık basamak için kesin olan sayılar bile türe göre decimal
daha doğru işlenir: örneğin, 0,1, tam olarak bir decimal
örnek tarafından temsil edilebilirken, 0,1'i tam olarak temsil eden veya float
örneği yokturdouble
. Sayısal türlerdeki bu fark nedeniyle, veya float
ondalık veri kullandığınızda double
aritmetik hesaplamalarda beklenmeyen yuvarlama hataları oluşabilir. Performansı iyileştirmenin decimal
doğruluğu sağlamaktan daha önemli olduğu durumlarda yerine kullanabilirsinizdouble
. Ancak, performanstaki farklar hesaplama açısından en yoğun uygulamalar dışında fark edilmez. Kaçınmanın decimal
bir diğer olası nedeni de depolama gereksinimlerini en aza indirmektir. Örneğin, ML.NET kullanır float
çünkü 4 bayt ile 16 bayt arasındaki fark çok büyük veri kümeleri için eklenir. Daha fazla bilgi için bkz. System.Decimal.
bir ifadedeki integral türleriyle float
ve double
türlerini karıştırabilirsiniz. Bu durumda, tam sayı türleri örtük olarak kayan nokta türlerinden birine dönüştürülür ve gerekirse, float
türü örtük olarak öğesine double
dönüştürülür. İfade, aşağıdaki gibi değerlendirilir:
- İfadede tür varsa
double
, ifade ilişkisel ve eşitlik karşılaştırmalarında veyabool
olarak değerlendirilirdouble
. - İfadede tür yoksa
double
, ifade ilişkisel ve eşitlik karşılaştırmalarında veya olarak değerlendirilirfloat
bool
.
Ayrıca, bir ifadedeki decimal
tam sayı türleriyle türünü de karıştırabilirsiniz. Bu durumda, tam sayı türleri örtük olarak türüne decimal
dönüştürülür ve ifade, ilişkisel ve eşitlik karşılaştırmalarında veya bool
olarak değerlendirilirdecimal
.
bir ifadedeki decimal
ve double
türleriyle float
türünü karıştıramazsınız. Bu durumda, aritmetik, karşılaştırma veya eşitlik işlemleri gerçekleştirmek istiyorsanız, aşağıdaki örnekte gösterildiği gibi işlenenleri türünden veya türüne decimal
açıkça dönüştürmeniz gerekir:
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
Kayan nokta değerini biçimlendirmek için standart sayısal biçim dizelerini veya özel sayısal biçim dizelerini kullanabilirsiniz.
Gerçek değişmez değerler
Gerçek değişmez değerin türü, soneki tarafından aşağıdaki gibi belirlenir:
- Soneksiz veya veya
D
soneki olmayand
değişmez değer türündedirdouble
- veya
F
soneki ilef
değişmez değer türündedirfloat
- veya
M
soneki ilem
değişmez değer türündedirdecimal
Aşağıdaki kod, her birinin bir örneğini gösterir:
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
Yukarıdaki örnekte ayrıca basamak ayırıcısı olarak kullanımı _
gösterilmektedir. Basamak ayırıcısını her türlü sayısal değişmez değerle kullanabilirsiniz.
Aşağıdaki örnekte gösterildiği gibi bilimsel gösterimi de kullanabilirsiniz, yani gerçek değişmez değerin bir üssünü belirtebilirsiniz:
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
Dönüşümler
Kayan noktalı sayısal türler arasında yalnızca bir örtük dönüştürme vardır: from to float
double
. Ancak, herhangi bir kayan nokta türünü açık atama ile başka bir kayan nokta türüne dönüştürebilirsiniz. Daha fazla bilgi için bkz . Yerleşik sayısal dönüştürmeler.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın: