是否可以检查双精度和char数据类型

本文关键字:char 数据类型 双精度 检查 是否 | 更新日期: 2023-09-27 17:51:06

一个面试官问我这个问题,当我检查它的工作时如何检查char和double类型?请谁给我解释一下。

class Program
{
    static void Main(string[] args)
    {
        double d=0;
        if((double)d == 'c')
        {
            Console.WriteLine("working");
        }
        else 
        { 
            Console.WriteLine("not"); 
        }
        Console.ReadLine();
    }
}

是否可以检查双精度和char数据类型

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) {...} 

您可以使用正常的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();
   }
}

实际上,当你试图比较任何数值char值,它不会给你任何编译时或运行时错误,因为char实际上是代表int16或16位整数值,所以当你试图比较双,整数或长与它,它会简单地比较它的ASCII值与它的字符。下面是一些例子:

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

以上代码的输出是"工作",因为字符"A"的ASCII值是65,而您正在将它与65进行比较,因此它在if条件下为真。