昨天写曲线算法的时候发现的一个关于double的小疑点,困扰好久,求大神帮忙说明原因

昨天写曲线算法的时候发现的一个关于double的小问题,困扰好久,求大神帮忙说明原因。
 总结出问题的代码如下:
 

#include <iostream>
#include <iomanip>
using namespace std;

void main()
{
double a=0.01;
for (int i=0;i<100;i++)
{
cout.setf(ios::fixed);
cout<<setw(8)<<setprecision(2)<<a*100;
a+=0.01;
}

cout<<endl<<endl;
a=0.01;
for (int i=0;i<100;i++)
{
cout<<setw(8)<<(int)(a*100);
a+=0.01;
}
system("pause");
}
 

输出结果:

      1.00    2.00    3.00    4.00    5.00    6.00    7.00    8.00    9.00   10.00
   11.00   12.00   13.00   14.00   15.00   16.00   17.00   18.00   19.00   20.00
   21.00   22.00   23.00   24.00   25.00   26.00   27.00   28.00   29.00   30.00
   31.00   32.00   33.00   34.00   35.00   36.00   37.00   38.00   39.00   40.00
   41.00   42.00   43.00   44.00   45.00   46.00   47.00   48.00   49.00   50.00
   51.00   52.00   53.00   54.00   55.00   56.00   57.00   58.00   59.00   60.00
   61.00   62.00   63.00   64.00   65.00   66.00   67.00   68.00   69.00   70.00
   71.00   72.00   73.00   74.00   75.00   76.00   77.00   78.00   79.00   80.00
   81.00   82.00   83.00   84.00   85.00   86.00   87.00   88.00   89.00   90.00
   91.00   92.00   93.00   94.00   95.00   96.00   97.00   98.00   99.00  100.00


       1       2       3       4       5       6       7       8       9      10
      10      11      12      13      15      16      17      18      19      20
      21      22      23      24      25      26      27      28      29      30
      31      32      33      34      35      36      37      38      39      40
      41      42      43      44      45      46      47      48      49      50
      51      52      53      54      55      56      57      58      59      60
      61      62      63      64      65      66      67      68      69      70
      71      72      73      74      75      76      77      78      79      80