2016-06-08 47 views
-3

這裏是我的代碼與非零分母除分子總是給人在C#零

DataTable dt=STP_GetRenewalResultsReportData(Convert.ToDateTime("06-07-2015"),Convert.ToDateTime("06-07-2016")).Tables[0]; 
(
from r in 
(
from d in dt.AsEnumerable() 
group d by d.Field<string>("CityID") into grpCity 
select new{ 
CityID = grpCity.Key, 
         City = (from g in grpCity where g.Field<string>("CityID") == grpCity.Key select g.Field<string>("City")).First().Trim(), 
         PotentialRenewalCount = (from g in grpCity where g.Field<string>("CityID") == grpCity.Key select g.Field<int>("PotentialRenewalCount")).Sum(), 
         // PotentialRenewalCount = 205, 
         PotentialRenewalSQRT = (from g in grpCity where g.Field<string>("CityID") == grpCity.Key select g.Field<double>("PotentialRenewalSQFT")).Sum(), 
        RENEWALCOUNT = (from g in grpCity where g.Field<string>("CityID") == grpCity.Key select g.Field<int>("RENEWALCOUNT")).Sum(), 
         // RENEWALCOUNT = 23, 
        RENEWALSQRT = (from g in grpCity where g.Field<string>("CityID") == grpCity.Key select g.Field<double>("RENEWALSQRT")).Sum(),     

} 
) 
select new{ 
CityID=r.CityID, 
City=r.City, 
PotentialRenewalCount=r.PotentialRenewalCount, 
PotentialRenewalSQRT=r.PotentialRenewalSQRT, 
RENEWALCOUNT=r.RENEWALCOUNT, 
RENEWALSQRT=r.RENEWALSQRT, 
LeaseNoPercentage=Convert.ToDouble(12/30) 
} 

).Dump(); 

現在當你在看這條線在底部

LeaseNoPercentage = Convert.ToDouble(12/30 )

我正在將一個非常小的數30和作爲結果我得到0時確切的結果是0.4

所以我的問題是我怎麼能得到0.4在這個LINQ而不是0

感謝你的幫助

+1

爲什麼不使用'12D/30d'(我不知道這是否正常工作) –

+1

即使'轉換.ToDouble((12/30));'可能會產生不同的結果。但是你真的每次都在做12/30嗎?如果這就是你所需要的,爲什麼不能只有0.4的恆定值。 – pay

+0

你真的想做什麼?如果你所要做的只是分割2個int文字並得到一個double,那麼你可能只需要'LeaseNoPercentage = 0.4' –

回答

1

1230是整數。

12/30做整數除法,結果爲0

0的int轉換爲double將導致0這個double。


既然你說你的代碼運行,我會假設你到Convert.ToDouble調用不拋出任何SQL相關的異常,如果是這樣的話,下面應該工作。

LeaseNoPercentage=Convert.ToDouble(12)/Convert.ToDouble(30) 

這樣的話,你會做double師,而不是整數除法,它應該導致0.4

1

此無關的LINQ。表達式

LeaseNoPercentage = Convert.ToDouble(12/30)

首先評估12/30。兩個參數都是整數,因此結果爲0.

然後將該結果傳遞給Convert.ToDouble()。將整數0轉換爲double將產生0.0。

爲避免此問題,您需要在執行除法操作之前將12和30轉換爲2倍。最直接的方法是把它們寫成12.0和30.0。如果你真正的代碼有整型變量,而不是常量(讓我們稱之爲NUM和DENOM),你可以這樣做:

LeaseNoPercentage = (double)num/(double)denom;