program ex_2;procedure BandConversion(n : double; m : integer; var a : array of char; var l : integer);
var
     i, j, t : integer;
     tch : char;
begin
     if n < 0 then
          n := -n;
     i := 0;
     t := trunc(n);
     repeat
           i := i+1;
           if (m > 10) and (t mod m >= 10) then
               a[i] := chr((t mod m) - 10 + ord('a'))
           else
               a[i] := chr((t mod m) + ord('0'));
           t := t div m;
     until t <= 0;
     for j := 1 to i div 2 do
     begin
          tch := a[j];
          a[j] := a[i-j+1];
          a[i-j+1] := tch;
     end;
     if n <> trunc(n) then
     begin
          i := i+1;
          a[i] := '.';
          while i <= 98 do            // 为什么输出结果没有 98 位,只有 16 位?
          begin
               i := i+1;
               n := n-trunc(n);
               n := n*m;
               if (m > 10) and (n >= 10) then
                   a[i] := chr(trunc(n) - 10 + ord('a'))
               else
                   a[i] := chr(trunc(n) + ord('0'));
               if n < 1E-32 then
                  break;
          end;
     end;
     l := i;
end;var
     a : array [1..98] of char;
     n : double;
     i, m, l : integer;
begin
     readln(n, m);
     BandConversion(n, m, a, l);
     for i := 2 to l+1 do        // i 为什么 要 从 2 开始,而不是从 1 开始
         write(a[i]);
     readln;
end.
上面是数字转换的程序,可以将十进制数转换成 M 进制。
请问:
1. i 为什么要从 2 开始,而不是从 1 开始
2. 为什么输出结果没有 98 位,只有 16 位?
编程环境为 Lazarus 0.9.28.2