Gereksinimler: Genellikle yuvarlama için kullanılır ve hassasiyet gereksinimlerine çok duyarlı değildir.
İki ondalık basamayı yuvarlamak için geliştirici aşağıdaki kodu yazdı,
Kod çok basit, geliştiricilerGerçek sonuç 12.12 oldu; bu da beklenen yuvarlatma sonucu olan 12.13 ile çelişiyordu。
Bu sonucun nedeni, Math.Round'un varsayılan olarak yuvarlatma kuralını kullanmaması, bunun yerine turları eşleştirmek için kullanmasıdır.
Beşe yuvarlayarak çift oluşturun
Bir çift oluşturmak için altıdan beşe yuvarlanması denilen yöntem, anlamlı rakamlar belirlendikten sonra, sonraki önemli rakam 4'ten küçük veya eşitse, aşağı yuvarlanır; eğer 6'dan büyük veya eşitse, bir yukarıya yuvarlanır. Bir sonraki önemli rakam 5 olduğunda,
- 5'ten önceki sayı tek ise, beşi yuvarlayıp bir artım
- Eğer 5, çift sayıdan önce ise, 5'i atlayın (0 çifttir).
İstatistiksel olarak, beşe yuvarlamaktan daha doğrudur, çünkü çok sayıda hesaplama olduğunda, her beşe yuvarlamak daha büyük bir sayıya yol açabilir.
Mesela:
1.15+1.25+1.35+1.45 = 5.2
Anlamlı rakamlar bir ondalık basamak ise, sonuç yuvarlatma prensibi kullanılarak elde edilir
1.2 + 1.3 + 1.4 + 1.5 = 5.4
Beş çifte yuvarlanarak elde edilen sonuç şudur:
1.2 + 1.2 + 1.4 + 1.4 = 5.2
Bu, yuvarlama kuralının daha kesin sonuçlar verdiğini gösterir.
Math.Round
Peki Math.Round'u beklenen yuvarlamayı nasıl elde etmek için kullanıyorsunuz?
Aslında, C#'daki Math.Round birçok aşırı yükleme yöntemi sunar, bunlar arasında iki yöntem vardır:
Her iki yöntem de, iki seçilebilir değere sahip MidpointRounding'in bir enumeration değişkeni olan mod adlanan üçüncü bir parametreyi sağlar
- AwayFromZero - yuvarlama
- ToEven - yuvarlamadan eşit yuvarlamaya
Yani ideal yuvarlatılmış bir sonuç istiyorsak, aşağıdaki kodu kullanabiliriz:
Aşağıda gösterildiği gibi MidpointRounding sayımı:
Referans:Bağlantı girişi görünür. |