是否可以检查双精度和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
类型实际上是一个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.000000000002
或65.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条件下为真。