【问题标题】:How to get data type of var如何获取var的数据类型
【发布时间】:2017-09-28 07:03:56
【问题描述】:

我正在尝试获取var {type} 变量的数据类型(intdecimal 等):

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

我无法获得avgValueavgValue2 的确切值来检查它是int 还是decimal。我总是得到 3 而不是 3.5。

如果 ratingSum 是 8,ratingCount 是 2,我的输出应该是 4,这意味着 avgValueint

【问题讨论】:

标签: c#


【解决方案1】:

要获取变量的类型,您可以使用以下内容:

variable.GetType().Name;

参考:How can I get the data type of a variable in C#?

【讨论】:

    【解决方案2】:

    您似乎想知道为什么您的结果不正确,而不是获取avgValueavgValue2 的类型(第一个是decimal,第二个是string)。这是您的结果的解释。

    ratingSum 的类型是 intratingCount 的类型也是 int

    当两个操作数都是int 时,除法将产生int 没有结果的小数部分。 IE。 7 / 2 = 3。要获得浮动结果,您可以使用此技巧:

    var avg = 1.0 * ratingSum / ratingCount; // 3.5
    

    【讨论】:

    • 好吧,我将 var 数据类型更改为 int 并将结果乘以 1.0 但仍然得到结果 3
    • 请再次阅读我的回答。您需要多个第一个操作数,而不是结果。如果您将多个 31.0,您将拥有 3.0,而不是 3.5
    【解决方案3】:

    整数除法总是返回一个整数,趋向于零,例如,这将是以下除法的结果:

    5 / 3 = 1 instead of 1.66
    2 / 4 = 0 instead of 0.5
    

    您可以强制 .NET 使用浮点除法,方法是将整数之一转换为浮点数或双精度数,因此示例必须像这样编写:

    (float) 5 / 3 = 1.66
    (float) 2 / 4 = 0.5
    

    您可以在 division operator 的 MSDN 文档中查看更多信息

    另一个 StackOverflow 问题有一个很好的答案,它解释了为什么会有整数除法。 Why integer division in c# returns an integer but not a float?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多