“无限”位四则运算[3]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 ehom 的 blog

   result:=strleft(result,'.')+strright(result,'.');
   while pos('0', result) = 1 do
     delete(result, 1, 1);//排除整数前无效的0
   while copy(result, length(result), 1) = '0' do
     delete(result, length(result), 1);//排除小数后无效的0
 end;

var
  i,j,t,v,y,len: integer;
  temsub,temnum: string;
begin
  result := '';
  mnumbera:=formatnum(mnumbera);
  mnumberb:=formatnum(mnumberb);
  v:=vdecimal(mnumbera)-vdecimal(mnumberb);
  mnumbera:=formatnum2(mnumbera);
  mnumberb:=formatnum2(mnumberb);
  if mnumberb='' then
    result:='err'
  else if mnumbera='' then
    result:='0'
  else
  begin
  i:=0;
  if length(mnumbera)>length(mnumberb) then
    len:=length(mnumberb)
  else
    len:=length(mnumbera);
  if copy(mnumbera,1,len)>=copy(mnumberb,1,len) then
    j:=length(mnumberb)
  else
    j:=length(mnumberb)+1;
  for y:=1 to j do
  begin
    if length(mnumbera)>=y then
      temsub:=temsub+mnumbera[y]
    else
    begin
      temsub:=temsub+'0';
      v:=v+1;
    end;
  end;
  while i<=n-1 do
  begin
    if temsub[1]>mnumberb[1] then
      t:=strtoint(temsub[1]) div strtoint(mnumberb[1])
    else
      t:=strtoint(temsub[1]+temsub[2]) div strtoint(mnumberb[1]);
    temnum:=infinitemult(mnumberb,inttostr(t));
    while (length(temnum)>length(temsub)) or ((length(temnum)=length(temsub))and(temnum>temsub)) do
    begin
      t:=t-1;
      temnum:=infinitemult(mnumberb,inttostr(t));
    end;
    result:=result+inttostr(t);
    i:=i+1;
    temsub:=infinitesub(temsub,temnum);
    if (temsub='0') and (length(mnumbera)<j) then
    begin
      v:=v+1;
      break;
    end;
    if temsub='0' then temsub:='';
    j:=j+1;
    if length(mnumbera)>=j then
    begin
      temsub:=temsub+mnumbera[j];
    end
    else
    begin
      temsub:=temsub+'0';
      v:=v+1;
    end;
  end;
  if length(mnumbera)>=j then
    v:=v-(length(mnumbera)-j)-1
  else
    v:=v-1;
  while copy(result, length(result), 1) = '0' do
  begin
    v:=v-1;
    delete(result, length(result), 1);
  end;
  if v>length(result) then
    result:='.'+dupestring('0',v-length(result)) + result
  else if v>0 then
    insert('.', result, length(result) - v +1); //插入小数点
  if v<0 then result:=result+dupestring('0',0-v);
  if copy(result, 1, 1)='.' then result:='0'+result; //小数前面补0
  end;

本文关键:四则运算
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top