Neden Matematik yapıyor.(2.5) dönüş 2 C 3 yerine yuvarlak#?
C#, Math.Round(2.5)
sonucu 2.
3, değil mi? olması gerekiyor. Neden 2 yerine C#?
CEVAP
Öncelikle, bu bir C olmaz# bug her neyse - bir olurdu .NET hata. Dili C# - Math.Round
nasıl uygulanır karar vermiyor.
Ve eğer the docs okursanız ikincisi, hiçbir varsayılan yuvarlama olduğunu görürsünüz "tura bile" (Banka'nın yuvarlama):
Değeri Döndürür< / ^ br . Tür: System.ÇiftDouble döndürür integral yazın.
Açıklamalar< / ^ br . Bu yöntemin davranış IEEE Standart 754,aşağıdaki 4. Bölüm. Yuvarlama bu tür bazen yuvarlama-en yakın aradı, ya da bankacı yuvarlama. En aza indirir gelen yuvarlama hataları bu sonucu sürekli yuvarlama orta nokta değeri tek bir yönde.
Math.Round
MidpointRounding
bir değer olan orta noktaları an overload kullanarak yuvarlak şeklini belirtin. MidpointRounding
Bir bir yok olan aşırı her birine karşılık gelen bir yük var:
Round(Decimal)
/Round(Decimal, MidpointRounding)
Round(Double)
/Round(Double, MidpointRounding)
Round(Decimal, Int32)
/Round(Decimal, Int32, MidpointRounding)
Round(Double, Int32)
/Round(Double, Int32, MidpointRounding)
Yoksa, bu varsayılan de seçildi ya da farklı bir konu değil. (MidpointRounding
tek tanıtıldı .NET 2.0. O zaman önce Kendin yapmadan istenen davranışı uygulamak için kolay bir yol var emin değilim.) Özellikle tarih olmadığını göstermiştirbeklendiğiAPI tasarım bir günah olan davranışlar - ve çoğu durumda. GörebiliyorumnedenBanka'nın Yuvarlama kullanışlıdır... ama hala birçok için bir sürpriz oldu.
Yakın Java bakmak ilginizi çekebilir daha fazla seçenek sunuyor eşdeğer numaralama (RoundingMode
). (Sadece orta noktalar ile anlaşma yok.)
Neden Matematik yapıyor.yuvarlak(0.499...
Neden'in matematik Python.() ceil...
Neden Matematik yapıyor.zemin geri bir...
Neden INSERT deyim seçin() bir tamsayı...
Neden Matematik yapıyor.Kat(Çift) türü...