Her zaman yüksek bir ondalık kesinlike ihtiyacımız var, hesaplamaları yapmak için ondalık kullanırız. Hassasiyetin hesaplama için yeterli olup olmadığını kontrol etmek için herhangi bir yolu var mı? Aşağıdaki kodu yapmak istiyorumHatalı hesaplamada nasıl bir istisna elde edilir?
bir istisna:
decimal almostMax = Decimal.MaxValue - 1;
decimal x = almostMax + 0.1m; // This should create an exception, since x equals almostMax.
Assert.AreEqual(x, almostMax); // This does NOT fail.
Gerçekten gerçek kodda önemli değil, ama güvenli olması güzel olurdu.
Ondalıkların sayısı 28 basamağa sahiptir (bazıları değil, hepsi de 29 basamağa sahip olabilir). Decimal.MaxValue, 28 basamaklı bir sayı olduğu için 0.1m ekleyerek ondalığın kesinliğini aşmaktadır, bu nedenle iki değer eşittir ve Assert başarısız olmaz. – PaulF
@PaulF, Bence OP bunun farkında. Çalışma zamanı boyunca bu problemi tespit etmenin bir yolunu arıyor. –
Lütfen bir istisnanın ağır bir operasyon olduğunu ve sadece gerçekleşmemesi gereken şeyler için kullanıldığını unutmayın. Bazı hesaplamaların başarısız olması olasıysa, bunun yerine "TryParse" gibi bir desen kullanmalısınız; bu, atma yerine boolean döndüren ve çok daha hızlı olacaktır. – Lukos