代码之家  ›  专栏  ›  技术社区  ›  Younes

c部门没有按我预期的方式进行

  •  4
  • Younes  · 技术社区  · 14 年前

    我试着写一些东西,让我的图像显示正确。 我有两个号码“breedtePlaatje”和“hoogtePlaatje”。当我用值“800”和“500”加载这两个变量时,我希望“verH”是(500/800)=0625。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;
        }
    }
    

    任何关于我的方法的建议都是很好的。

    5 回复  |  直到 14 年前
        1
  •  11
  •   Arve    14 年前

    用int除以int得到一个int。

    double verH = (hoogtePlaatje/breedtePlaatje);
    

    赋值的右侧是一个整数值。

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

        2
  •  6
  •   Oded    14 年前

    您需要除法的一个参数是一个浮点数,这样结果才是一个浮点数。你可以把其中一个放在浮子上。

    double verH = (double)hoogtePlaatje/breedtePlaatje;
    

    double verH = hoogtePlaatje/(double)breedtePlaatje;
    

    看见 the C# spec 关于部门。

        3
  •  4
  •   Greg Beech    14 年前

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

    500 / 800 = 0 + 5/8 
    

    去掉分数部分,得出:

    500 / 800 = 0
    

    double , float decimal 根据所需的精度级别,这将导致另一个参数隐式转换为同一类型,并使用浮点规则而不是整数规则执行除法,例如。

    double result = (double)breedtePlaatje  / hoogtePlaatje ;
    
        4
  •  2
  •   kd35a    14 年前

    double verH = (double)hoogtePlaatje/breedtePlaatje;
    
        5
  •  1
  •   Tarydon    14 年前

    试试这个:

    double verH = double (hoogtePlaatje) / breedtePlaateje;
    

    如果你把一个整数除以一个整数,你会得到一个截断的答案。把其中一个打成双人,整个师就成了双人。