第一次,创建窗体
  mAccumulator:=0;
  nAccumulator:=0;
  nDecimal:=0;
  nPreviousOperation:=0;
  nClear:=false;
点击按钮走到else里
nAccumulator:=0;
nDecimal:=1;
第二次nDecimal>0,结果
nAccumulator=1;
nDecimal=10;
第三次nDecimal>0,结果
nAccumulator = nAccumulator+1.0/nDecimal = 1+1.0/10=1.1
nDecimal := 100;
第四次nDecimal>0,结果
nAccumulator = nAccumulator+1.0/nDecimal=1.1+1.0/100=1.11
nDecimal := 1000;
第五次nDecimal>0,结果
nAccumulator = nAccumulator+1.0/nDecimal=1.11+1.0/1000=1.111
nDecimal := 10000;
至于第五次为什么是1.1,我也不知道了,是不是程序某个地方改变了nClear=ture;使得执行ClearEntry(),又重新将nAccumulator,nDecimal置0,重新循环

解决方案 »

  1.   

    if nDecimal>0 then
      begin
        nAccumulator:= nAccumulator+1.0/nDecimal;
        nDecimal:=nDecimal*10;
      end
      else
      begin
        nAccumulator:= nAccumulator*10;
        nDecimal:=nDecimal+1;
      end;
    程序主要在这里执行,窗口初始化nAccumulator:=0;nDecimal:=0;
    所以第一次执行nAccumulator:= nAccumulator*10;
        nDecimal:=nDecimal+1;结果
    nAccumulator=0,nDecimal=1;第二次---第五次执行nAccumulator:= nAccumulator+1.0/nDecimal;
        nDecimal:=nDecimal*10;
    所以
                  第二次,nAccumulator=1,nDecimal=10
                  第三次nAccumulator=1.1,nDecimal=100
                  第四次nAccumulator=1.11,nDecimal=1000
                  第五次nAccumulator=1.111,nDecimal=10000