Nasıl bir döküm a yaptığı doubleiçin decimalpara gelişimini yaparken hangi kullanılır. Nereye Mgidiyor?
decimal dtot = (decimal)(doubleTotal);
Yanıtlar:
Yalnızca Msayısal bir değişmez değer için kullanırsınız, yayınladığınızda yalnızca:
decimal dtot = (decimal)doubleTotal;
Bir kayan nokta sayısının tam bir değeri tutmaya uygun olmadığını unutmayın; bu nedenle, önce sayıları birlikte eklerseniz ve sonra Decimalsize dönüştürürseniz yuvarlama hataları alabilirsiniz. Sayıları Decimalbirbirine eklemeden önce dönüştürmek isteyebilir veya ilk etapta sayıların kayan nokta sayıları olmadığından emin olabilirsiniz.
MDeğişmez son eke ihtiyaç duymadan, böyle bir ondalık sayıya çift çevirebilirsiniz :
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
MYeni bir değişmez ondalık değer bildirirken şunu kullanmalısınız :
decimal dec = 123.45M;
( M123.45 olmadan, çift olarak kabul edilir ve derlenmez.)
varsayılan dönüştürme sınıfını kullan: Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
doubleiçin decimalbir için göz önüne alındığında, doublebazı durumlarda (1000000,0 / 3.0) gibi değer bir olur 333333.333333333D sonucunu veren "fazla" hassasiyeti kırpmak istersiniz, ancak diğer durumlarda 333333.333333333313931D sonucunu vererek onu korumak isteyebilirsiniz. Kod, basitçe "ondalık sayıya dönüştür" demek yerine, bu dönüşümün nasıl gerçekleştirileceğini belirtmelidir.
Convert.ToDecimal(double)aynıdır (decimal)doubleTotal, ancak doubleTotalfarklı bir türe değiştirilirse, muhtemelen bir derleme zamanı hatasından kaçınır ve bulunması daha zor bir çalışma zamanı hatası verirsiniz çünkü farklı bir ToDecimal geçersiz kılma çağrılabilir. Cast operatörü çok daha açık ...
Bu eski bir soru ve ben gerçekten burada gösterilen cevaplardan bazılarını kullandım. Yine de, benim özel senaryomda double, dönüştürmek istediğim değerin decimalgenellikle daha büyük olması mümkündü decimal.MaxValue. Bu nedenle, istisnaları ele almak yerine bu uzantı yöntemini yazdım:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
Yukarıdaki yaklaşım, taşma istisnalarını ele almakla uğraşmak istemiyorsanız ve böyle bir şey olursa, sadece mümkün olan maksimum değeri (benim durumum) korumak istiyorsanız işe yarar, ancak diğer birçok senaryo için bunun beklenen davranış olmayacağının farkındayım. ve istisna işleme gerekli olabilir.