想请教一下,如何根据人数平均分配100%给他,小数要求保留的是最多两位,最少不限,如11人的话,可以前面10人比例是9.09,第11个人可以分配9.1这样。如何处理,谢谢。

解决方案 »

  1.   

    假设有N个人,前面的N-1个人分配(10000 div n-1),最后一个分配10000-(n-1)*(10000 div n-1)
      

  2.   

    11就是总人数procedure TForm1.Button4Click(Sender: TObject);
    var
      m,n:Integer;
    begin
      m:=10000 div 11;
      n:=10000 div 11+10000 mod 11;
      self.Label2.Caption:=FloatToStr(m/100);
      self.Label3.Caption:=FloatToStr(n/100);
    end;
      

  3.   

    label2的内容就是前10个人的分配数,label3的内容就是最后一个人的分配数
      

  4.   

    function FormatFloat(const Format: string; Value: Extended): string;
    FormatFloat('0.00', 2.122)
      

  5.   


    procedure TForm1.btn1Click(Sender: TObject);
    const
      Total = 100;
      Count = 11;
    var
      avg: Double;
      F1, F2: Double;
      S1, S2: string;
    begin
      //RoundTo函数在Math.pas单元中定义,需要添加Math单元的引用
      avg := RoundTo(Total / Count, -2);   //计算平均值, 保留两位小数  F1 := avg;                           //第一个值 F1 = 9.09
      F2 := RoundTo(Total - avg * 10, -2); //第二个值 F2 = 9.10 (-2: 保留两位小数)  S1 := Format('%.2f', [F1]);          //浮点数F1转字符串
      S2 := Format('%.2f', [F2]);          //浮点数F2转字符串  ShowMessage(S1 + ', ' + S2);
    end;