关于浮点数相加的有关问题

关于浮点数相加的问题
现在又两个浮点数

double d1 = 21474836.47 ;
double d2 = -21474836.48 ;
AnsiString str = FloatToStr(d1 + d2 )

但是相加的时候发现得出的结果是
-0.0100000016391277
然后改为

AnsiString str= AnsiString().sprintf("%lg",d1+d2 );

上述结果可得到-0.01
但是当

double d1 = 21474836.47 ;
double d2 = 21474836.47 ;

显示的结果是
4.29497e+07
但是我想得到
42949672.94
该怎么做呢,跪求
------解决思路----------------------
sprintf("%.2f",d1+d2 );