2016-06-08 30 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;