构建高质量的C#代码
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

代码 2-3:整数除法运算应用错误演示(<DivisionDemo1>\Program.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DivisionDemo1
{
class Program
    {
    static void Main(string[] args)
        {
            //原始尺寸
            int width = 800, height = 600;
            //新的尺寸
            int newWidth=500, newHeight;
            //计算新的高度值(此处就是错误的开始)
            newHeight = newWidth / (width / height);
            //显示结果
            Console.WriteLine("原始尺寸宽:{0},高:{1}",
                width, height);
            Console.WriteLine("新的尺寸宽:{0},高:{1}",
                newWidth, newHeight);
        }
    }
}

请注意代码中加粗的代码,我们使用了两个除法运算,其中,后一个width/height用于计算原始尺寸中宽度与高度的比值,然后通过新尺寸的宽度除以这个比值得到新的高度值。我们通过手工计算可以得到新的高度值大约是375。但是,我们可以通过图2-1发现,代码运行的结果并不是这样。

图2-1

实际上,你会发现,就代码2-3 而言,无论你将newWidth设置为什么值,计算出的newHeight都会与它一样。这是因为,代码中width/height的计算结果为1,而不是1.3333333。

现在,我们可以得出结论,在两个整数进行除法运算时,其结果如果不是整数时,会隐式地转换为整数,这时会舍弃小数部分。这样,我们就可以解释代码2-3的运行结果了。

为了解决这一计算问题,我们只需要将width、height、newWidth和newHeight定义为浮点数或decimal类型即可,代码2-4就是使用float类型改写的代码。