是否可以检查double和char数据类型

时间:2014-03-20 07:11:25

标签: c# asp.net

一位面试官向我提出这个问题,当我正在检查它是如何工作时如何检查字符的类型和双倍? 请任何人解释一下。

class Program
{
    static void Main(string[] args)
    {
        double d=0;

        if((double)d == 'c')
        {
            Console.WriteLine("working");
        }
        else 
        { 
            Console.WriteLine("not"); 
        }

        Console.ReadLine();
    }
}

3 个答案:

答案 0 :(得分:8)

Char类型实际上是 16位整数,因此您可以根据需要进行比较:

  Double left = 'B'; // <- 66.0
  Char right = 'A';  // <- it's 16-bit int == 65 in fact 

  if (left > right) {...}

但是有一个问题:由于==以及其他!=或Double 而没有宽容 >浮点类型有舍入错误,所以

  Double left = 66; 

实际上可能是66.00000000000265.9999999999998。这样的事情:

  Double left = 'B'; // <- 66.0
  Char right = 'A';  // <- it's 16-bit int == 65 in fact 

  // (left == right) comparison with tolerance
  // Since right is integer in fact, 0.1 tolerance is OK
  if (Math.Abs(left - right) < 0.1) {...} 

答案 1 :(得分:2)

您可以使用普通GetType()typeof()来检查任何对象的类型。像这样

class Program
{
    static void Main(string[] args)
    {
      double d=0;

      if(d.GetType() == typeof(Char))
      {
        Console.WriteLine("working");
      }
      else 
      { 
        Console.WriteLine("not"); 
      }

      Console.ReadLine();
   }
}

答案 2 :(得分:0)

实际上当你试图将任何数值与char值进行比较时,它没有给你任何编译时或运行时错误,因为char实际上代表int16或16位整数值,所以当你尝试比较double时,对于整数或长整数,它将简单地比较该字符的ASCII值。这是一些例子......

double d = 65;
if (d == 'A')
{
    Console.WriteLine("working");
}
else { Console.WriteLine("not"); }

上面的代码输出是“工作”,因为char“A”ASCII值是65,你将它与65进行比较,所以if条件是真的。