Aracılığıyla paylaş


Kayan Noktalı Sayılar

Bu konu başlığında, geliştiricilerin ADO.NET'da kayan noktalı sayılarla çalışırken sıklıkla karşılaştıkları sorunlardan bazıları açıklanmaktadır. Bu sorunlara bilgisayarların kayan noktalı sayıları depolama şekli neden olur ve veya System.Data.OracleClientgibi System.Data.SqlClient belirli bir sağlayıcıya özgü değildir.

Kayan noktalı sayıların genellikle tam ikili gösterimi yoktur. Bunun yerine, bilgisayar sayının yaklaşık bir sayısını depolar. Farklı zamanlarda, sayıyı temsil etmek için farklı sayıda ikili basamak kullanılabilir. Kayan noktalı sayı bir gösterimden başka bir gösterime dönüştürüldüğünde, bu sayının en az önemli basamakları biraz farklılık gösterebilir. Dönüştürme genellikle sayı bir türden başka bir türe geçtiğinde gerçekleşir. Değişim, dönüştürmenin veritabanı içinde mi, veritabanı değerlerini temsil eden türler arasında mı yoksa türler arasında mı gerçekleştiğini gösterir. Bu değişiklikler nedeniyle, mantıksal olarak eşit olabilecek sayıların en az önemli basamaklarında farklı değerlere sahip olmalarına neden olan değişiklikler olabilir. Sayıdaki duyarlık basamaklarının sayısı beklenenden büyük veya daha küçük olabilir. Dize olarak biçimlendirildiğinde, sayı beklenen değeri göstermeyebilir.

Bu efektleri en aza indirmek için, kullanabileceğiniz sayısal türler arasındaki en yakın eşleşmeyi kullanmanız gerekir. Örneğin, SQL Server ile çalışıyorsanız, gerçek türdeki transact-SQL değerini float türünde bir değere dönüştürürseniz tam sayısal değer değişebilir. .NET Framework'te, a'yı Single ' Double a dönüştürmek de beklenmeyen sonuçlara neden olabilir. Bu iki durumda da, uygulamadaki tüm değerlerin aynı sayısal türü kullanmasını sağlamak iyi bir stratejidir. Sabit duyarlıklı ondalık türü de kullanabilir veya kayan noktalı sayıları, bunlarla çalışmadan önce sabit duyarlıklı bir ondalık türe dönüştürebilirsiniz.

Eşitlik karşılaştırması ile ilgili sorunları geçici olarak çözmek için uygulamanızı en az önemli basamaklardaki varyasyonların yoksayıldığı şekilde kodlamayı göz önünde bulundurun. Örneğin, iki sayının eşit olup olmadığını görmek yerine, bir sayıyı diğer numaradan çıkarın. Fark yuvarlamanın kabul edilebilir bir kenar boşluğu içindeyse, uygulamanız sayıları aynı gibi değerlendirebilir.

Ayrıca bkz.