c#中的划分不符合我的预期

我试图写一些东西,以使我的图像正确显示。 我有2个号码“breedtePlaatje”和“hoogtePlaatje”。 当我加载这两个变量值时,我得到“800”和“500”,我希望“verH”为(500/800)= 0,625。 那个verH = 0的值。

这是代码:

int breedtePlaatje = Convert.ToInt32(imagefield.Width); int hoogtePlaatje = Convert.ToInt32(imagefield.Height); //Uitgaan van breedte plaatje if (breedtePlaatje > hoogtePlaatje) { double verH = (hoogtePlaatje/breedtePlaatje); int vHeight = Convert.ToInt32(verH * 239); mOptsMedium.Height = vHeight; mOptsMedium.Width = 239; //Hij wordt te klein en je krijgt randen te zien, dus plaatje zelf instellen if (hoogtePlaatje < 179) { mOptsMedium.Height = 179; mOptsMedium.Width = 239; } } 

关于我的方法的任何提示都很可爱。

将int除以int得到一个int。

 double verH = (hoogtePlaatje/breedtePlaatje); 

赋值的右侧是整数值。

将breedtePlaatje和/或hoogtePlaatje改为加倍,您将得到您期望的答案。

整数除法将导致返回整数作为除法结果。

您需要将除法的一个参数设置为浮点数,以使结果成为浮点数。 您可以通过将其中一个转换为浮点数来完成此操作。

 double verH = (double)hoogtePlaatje/breedtePlaatje; 

要么

 double verH = hoogtePlaatje/(double)breedtePlaatje; 

有关除法的信息,请参阅C#规范 。

当你分割两个整数时,C#使用整数除法 ,其中小数部分被丢弃。 在你的情况下,你得到:

 500 / 800 = 0 + 5/8 

其中,丢弃小数部分,给出:

 500 / 800 = 0 

要获得浮点除法,请根据所需的精度级别将其中一个参数转换为doublefloatdecimal ,这将导致另一个参数被隐式转换为相同的类型,并使用浮点规则执行除法而不是整数规则,例如

 double result = (double)breedtePlaatje / hoogtePlaatje ; 

我从未使用过C#,但可能你需要将其中一个变量转换为double,如下所示:

 double verH = (double)hoogtePlaatje/breedtePlaatje; 

试试这个:

 double verH = double (hoogtePlaatje) / breedtePlaateje; 

如果将int除以int,则会得到截断的答案。 将其中一个投射到一个双,整个部门将完成双倍。