Nasıl bir döküm a yaptığı double
için decimal
para gelişimini yaparken hangi kullanılır. Nereye M
gidiyor?
decimal dtot = (decimal)(doubleTotal);
Yanıtlar:
Yalnızca M
sayı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 Decimal
size dönüştürürseniz yuvarlama hataları alabilirsiniz. Sayıları Decimal
birbirine eklemeden önce dönüştürmek isteyebilir veya ilk etapta sayıların kayan nokta sayıları olmadığından emin olabilirsiniz.
M
Değişmez son eke ihtiyaç duymadan, böyle bir ondalık sayıya çift çevirebilirsiniz :
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
M
Yeni bir değişmez ondalık değer bildirirken şunu kullanmalısınız :
decimal dec = 123.45M;
( M
123.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);
double
için decimal
bir için göz önüne alındığında, double
bazı 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 doubleTotal
farklı 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 decimal
genellikle 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.