上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类型改写的代码。