上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
代码 2-9:计算两点间距离(<MathDemo>\Program.cs)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MathDemo { class Program { static void Main(string[] args) { //点一坐标 double x1 = 100D, y1 = 100D; //点二坐标 double x2 = 200D, y2 = 200D; //计算距离 double interval = Math.Sqrt(Math.Pow(x2- x1, 2D) + Math.Pow(y2- y1, 2D)); //显示结果 Console.WriteLine("两点距离:{0}", interval); } } }
代码中,我们使用Math类中的Pow()方法进行数值的幂运算,分别计算横坐标长度的平方和纵坐标长度的平方,然后通过Sqrt()方法计算这两个值相加后的算术平方根,最终得出了两点的距离,运行结果如图2-5所示。
图2-5
2.3.2 高质量代码准则:合理使用浮点数和decimal类型
1. 浮点数的比较
首先,我们思考下面这条语句的运算结果:
Console.WriteLine(1.000000101F == 1.000000109F);
这条语句的功能是测试两个值是否相等。请注意,在C#中的等于比较运算符是两个等号(==),初学者经常在这里少输入一个等号,结果程序产生了难以查找的错误。与此相反的,不等于比较运算符是由一个叹号和一个等号组成的,即“!=”。
从字面上看,它们似乎是不相等的。但实际上,这条语句的输出结果是true,即两个数值相等。这是因为,我们将两个数值的字面值指定成了float类型,而float的精度只有7位小数左右,多出的小数位将会被丢弃,所以造成了两个数比较的结果是相等的。如果我们将两个数的字面值指定为D,即设置为double类型,则比较的结果是false,这是因为double的精度大约为15~16位小数,代码如下:
Console.WriteLine(1.000000101D == 1.000000109D);
这就是我们使用浮点数应该注意的第一个问题,即在判断两个浮点数是否相等时,应该特别小心浮点数支持的精度。而对于decimal数据类型,相信其精度已经足够我们的程序使用了。
另外,在比较两个数据是否相等时,我们还可以使用Equals()方法来进行判断,代码2-10演示了此方法的使用。