我正在尝试获取int
变量的数据类型(decimal
,var {type}
等):
var ratingSum = ratings.Sum(x=>x.Rating);//7
var ratingCount = ratings.Count();//2
decimal avgValue = decimal.Parse((ratingSum / ratingCount).ToString());//getting 3
var avgValue2 = (ratingSum / ratingCount).ToString(); //getting 3
我无法获得avgValue
或avgValue2
的确切值来检查它是int
还是decimal
。我总是得到3而不是3.5。
如果ratingSum
为8且ratingCount
为2,则我的输出应为4,表示avgValue
属于int
。
答案 0 :(得分:2)
您似乎想知道为什么您的结果不正确,而不是avgValue
和avgValue2
的类型(第一个是decimal
,第二个是string
)。以下是对结果的解释。
ratingSum
的类型为int
,ratingCount
的类型也为int
。
两个操作数均为int
时的除法将产生int
而不包含部分结果。即7 / 2 = 3
。要获得浮动结果,您可以使用此技巧:
var avg = 1.0 * ratingSum / ratingCount; // 3.5
答案 1 :(得分:0)
答案 2 :(得分:0)
整数除法总是返回一个趋于零的整数,所以例如这将是以下除法的结果:
5 / 3 = 1 instead of 1.66
2 / 4 = 0 instead of 0.5
您可以通过将整数之一强制转换为float或double来强制.NET使用float除法,因此示例必须像这样编写:
(float) 5 / 3 = 1.66
(float) 2 / 4 = 0.5
您可以在MSDN文档中查看division operator
的更多信息对于另一个解决为什么存在整数除法的StackOverflow问题,这是一个很好的答案。 Why integer division in c# returns an integer but not a float?