公司领导除了这样一个题,第一遍,我意思都没读懂,后来理解了,需要写一个扩展方法。这在C#中也是很重要的一个知识点。
至于为什么两个数为什么相减等于0不就可以了?
这是因为这两个数据是double类型,精度是不同的。
如果是两个已经复制的double变量,那么你可以通过a==b来判断两个数是否相等。
可如果你是通过计算得到的两个double数据,有可能即使相等,也会认为这两个double数据不相等,这就是这道题的由来!
我的解:
public static bool IsEquals(this double a,double b,double standard)
{
if (a - b > standard ||
a - b < -standard)
{
Console.WriteLine("不相等");
return false;
}
Console.WriteLine("相等");
return true;
}
在主函数里调用:
IsEquals(2.0001, 2.00001, 0.0001);
然而这并不是扩展方法!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
其实这题主要考的是,对扩张方法的理解:
创建扩展方法很简单,有以下几个步骤:
1、创建一个静态类;
2、在其中创建一个静态方法;
3、为这个静态方法添加至少一个参数,并在第一个参数前加上this关键字,这个关键字会告诉编译器当前方法是一个扩展方法。而这个方法将成为第一个参数所属类型的新成员。
所以正确的解法是:
public static class DoubleExtension
{
private const double Threshold = 0.00001;
public static bool IsEquals(this double a, double b)
{
if (a - b > Threshold ||
a - b < -Threshold)
{
Console.WriteLine("{0} != {1}", a, b);
return false;
}
Console.WriteLine("{0} = {1}", a, b);
return true;
}
}
这样去调用:
//测试double扩展方法
Console.WriteLine("测试double扩展方法.....");
double parameterOne = 2.0001, parameterTwo = 2.00001;
parameterOne.IsEquals(parameterTwo);