C#中浮点数的比较
前几天去面试,被问到怎么比较两个浮点数的大小,当时只说了个大概,看得出来面试官不是太满意,回来特意查了一下,在MSDN上发现了比较浮点数是否相等的不错的方法:
// Initialize two doubles with apparently identical values double double1 = .33333; double double2 = (double) 1/3; // Define the tolerance for variation in their values double difference = double1 * .0001; // Compare the values // The output to the console indicates that the two values are equal if (Math.Abs(double1 - double2) <= difference) Console.WriteLine("double1 and double2 are equal."); else Console.WriteLine("double1 and double2 are unequal.");
上段代码中定义了一个比较精度,两个浮点数的差在此精度误差之中,就可以认为相等。
至于两个浮点数的大小比较,我认为直接用double1 > double2这种格式就可以了,看到网上有人将double1和double2的差和double.Epsilon比较,个人认为这只是取了最精确的精度值,跟上面的方法本质是一样的,不知道理解的是否正确,欢迎大家拍砖。