AnsiStirng 类型数据相减,该如何解决

AnsiStirng 类型数据相减
C/C++ code

    AnsiString we = "123456.1234";
    AnsiString wr = "1.123";
    we = we-wr;
    ShowMessage(we);  //123455.0004



C/C++ code

    AnsiString we = "123456789123456.1234";
    AnsiString wr = "1.123";
    we = we-wr;
    ShowMessage(we);   //  123456789123455



数据短的时候正常,数据大了小数点后面就没有了 这怎么办,丢失精确度了,这个是什么原因,怎么处理啊

------解决方案--------------------
转换成double类型再减吧。
------解决方案--------------------
转换成double类型再减吧。
------解决方案--------------------
转换成long double试试。
------解决方案--------------------
应该是浮点数据显示精度的问题,vc好像没有这个问题,
目前 俺也无能为力***
------解决方案--------------------
探讨
不知道。。 但做的不能留危险的缝隙啊 万一呢 呢呢。。

------解决方案--------------------
编译器会用科学技术法来计数,我个人的建议,自己定义下
思路:分2部分计算 整数部分 和小数部分 然后拼接起来
------解决方案--------------------
AnsiString c = "123456789123456.9";
AnsiString d = "123456789012345.9";

double b = StrToFloat(c.SubString(1,c.Pos(".")-1));
double a = StrToFloat(d.SubString(1,d.Pos(".")-1));

AnsiString e = c.SubString(c.Pos(".")+1,c.Length());
AnsiString f = d.SubString(d.Pos(".")+1,d.Length());
int len = e.Length()>f.Length()?e.Length():f.Length();
if(e.Length()!=f.Length())
{
if(e.Length()>f.Length())
{
for(int i =0;i<e.Length()-f.Length();i++)
{
f += "0";
}
}
else
{
for(int j =0;j<f.Length()-e.Length();j++)
{
e += "0";
}
}
}
AnsiString g = FloatToStr(StrToFloat(e)+StrToFloat(f));
AnsiString result;
if(g.Length()>len)
{
result = FloatToStr(a+b+1)+"."+g.SubString(2,g.Length());
}else
{
result = FloatToStr(a+b)+"."+g.SubString(1,g.Length());
}

ShowMessage(result);