我也来凑个热闹…… ====分币凑整 function GetSumCB(sl:TStringList;target,error:Double):TStringlist; var t: TStringlist; procedure GetAdd(tal:Double;R,Left:TStringlist); var i,cnt:Integer; value:Double; s,sA:string; nR,nLeft:TStringlist; begin value:=StrToFloat(Left.Names[Left.Count-1]); cnt:=StrToInt(Left.ValueFromIndex[Left.Count-1]); left.Delete(Left.Count-1); tal:=tal-value; for i:=0 to cnt do begin tal:=tal+value; if tal>target+error then exit; if i>0 then begin s:=FloatToStr(value)+'*'+IntToStr(i); R.Add(s); if Abs(tal-target)<=error then begin if tal=target then sA:='[P]' else sA:='[Dlt='+Format('%.2f', [tal-target])+']'; Result.Add('Method '+IntToStr(Result.Count+1)+sA+':'#13#10+R.Text); end; end; if left.Count>0 then begin nR:=TStringlist.Create; nLeft:=TStringlist.Create; nR.Assign(R); nLeft.Assign(Left); GetAdd(tal,nR,nLeft); nR.Free; nLeft.Free; end; if i>0 then R.Delete(R.Count-1); end; end; begin Result:=TStringlist.Create; t:= TStringlist.Create; GetAdd(0,t,sl); t.Free; if Result.Count=0 then Result.Add('None') else Result.Add('Total '+IntToStr(Result.Count)); end; procedure TForm1.btn1Click(Sender:TObject); var s:TStringList; begin s:=Tstringlist.Create; s.Add('3.1=9'); s.Add('12.7=2'); s.Add('5=5'); MessageDlg(GetSumCB(s,68.3,1).Text,mtWarning, [mbOK],0); end;