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
要获得浮点除法,请根据所需的精度级别将其中一个参数转换为double
, float
或decimal
,这将导致另一个参数被隐式转换为相同的类型,并使用浮点规则执行除法而不是整数规则,例如
double result = (double)breedtePlaatje / hoogtePlaatje ;
我从未使用过C#,但可能你需要将其中一个变量转换为double,如下所示:
double verH = (double)hoogtePlaatje/breedtePlaatje;
试试这个:
double verH = double (hoogtePlaatje) / breedtePlaateje;
如果将int除以int,则会得到截断的答案。 将其中一个投射到一个双,整个部门将完成双倍。