首页 > 代码库 > 1.1确定分数与浮点数值之间的近似相等性。

1.1确定分数与浮点数值之间的近似相等性。

知识点:

1.Double.Epsilon字段和Single.Epsilon字段

2.Float和double近似值比较

问题:

需要比较一个分数和一个double或float类型的值,确定它们彼此是否很接近。例如,我们来看表达式1/6和值0.16666667的比较结果。看上去这二者是相等的,但是0.16666667只精确到小数点右边的8位,而1/6则精确到数据类型所允许的小数点右边的最大位数。

 

解决方案:

比较一个分数和一个浮点值之间的近似相等性,需要检查连个值之差是否在一个可接受的范围内:

 

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace _03确定分数与浮点数值之间的近似相等性 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             Console.WriteLine("输入第一个数的分子:");14             var numerator = Console.ReadLine();15             Console.WriteLine("输入第一个数的分母:");16             var denominator = Console.ReadLine();17             Console.WriteLine("请输入浮点型的比较值:");18             var dblValue=http://www.mamicode.com/ Console.ReadLine();19             Console.WriteLine("请输入精度:");20             var epsilon = Console.ReadLine();21             bool IsGoodApproximate= IsApproximatelyEqualTo(Convert.ToDouble(numerator), Convert.ToDouble(denominator), Convert.ToDouble(dblValue),Convert.ToDouble(epsilon));22             if (IsGoodApproximate)23             {24                 Console.WriteLine("Good approximate");25             }26             else27             {28                 Console.WriteLine("Bad approximate");29             }30             Console.ReadKey();31         }32 33         //使用System.Double.Epsilon值34         public static bool IsApproximatelyEqualTo(double numerator, double denominator, double dblValue) 35         {36             return IsApproximatelyEqualTo(numerator, denominator, dblValue, double.Epsilon);37         }38 39         private static bool IsApproximatelyEqualTo(double numerator, double denominator, double dblValue, double epsilon)40         {41             double difference = (numerator / denominator) - dblValue;42             if (Math.Abs(difference)<epsilon)43             {44                 //这是一个很好的近似(足够近似)45                 return true;46             }47             else48             {49                 //这是一个不好的近似(不够近似)50                 return false;51             }52         }53 54     }55 }
View Code

 

结果:

bool IsGoodApproximate= IsApproximatelyEqualTo(1,7,.142857,.0000001);
//Approximate==false

bool IsGoodApproximate= IsApproximatelyEqualTo(1,7,.1428571,.0000001);
//Approximate==true

1.1确定分数与浮点数值之间的近似相等性。