代码之家  ›  专栏  ›  技术社区  ›  Ben Mills

C中的整数数学#

  •  8
  • Ben Mills  · 技术社区  · 18 年前

    我有一个产品品牌菜单,我想分为4列。因此,如果我有39个品牌,那么我希望每列的最大项目计数为10(在最后一列中有一个间隙)。下面是我如何计算列的项目计数(使用c):

    int ItemCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(BrandCount) / 4m));
    

    在我看来,所有的转变都很难看。有没有更好的方法来计算c中的整数?

    4 回复  |  直到 17 年前
        1
  •  21
  •   kÍ©eÍ£mÍ®pÍ¥ Í©    18 年前

    你可以投:

    int ItemCount = (int) Math.Ceiling( (decimal)BrandCount / 4m );
    

    此外,因为 int / decimal 结果A 十进制的 您可以移除其中一个铸件:

    int ItemCount = (int) Math.Ceiling( BrandCount / 4m );
    
        2
  •  10
  •   Motti    17 年前

    你为什么还要用小数?

    int ItemCount = (BrandCount+3)/4;
    

    这个 +3 确保向上取整而不是向下取整:

    (37+3)/4 == 40/4 == 10
    (38+3)/4 == 41/4 == 10
    (39+3)/4 == 42/4 == 10
    (40+3)/4 == 43/4 == 10
    

    一般来说:

    public uint DivUp(uint num, uint denom)
    {
        return (num + denom - 1) / denom;
    }
    
        3
  •  7
  •   GavinCattell    18 年前

    一个更长的选择与国防部。

    ItemCount = BrandCount / 4;
    if (BrandCount%4 > 0) ItemCount++;
    
        4
  •  2
  •   John Rudy    18 年前

    也许可以试试这样的…假设 BrandCount 是一个整数。你仍然有相同的石膏,但可能更清楚:

    int ItemCount = (int)(Math.Ceiling(BrandCount / 4m));
    

    我不太喜欢 Convert 上课,我尽量避免。它总是让我的代码难以辨认。