AnsiStirng 类型数据相减,该如何解决
AnsiStirng 类型数据相减
数据短的时候正常,数据大了小数点后面就没有了 这怎么办,丢失精确度了,这个是什么原因,怎么处理啊
------解决方案--------------------
转换成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);
- 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);