首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-04-22 
AnsiStirng 类型数据相减C/C++ codeAnsiString we 123456.1234AnsiString wr 1.123we we-wrS

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);

热点排行