AnsiStirng 类型数据相减

老白猫 2012-04-18 09:55:24

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



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


数据短的时候正常,数据大了小数点后面就没有了 这怎么办,丢失精确度了,这个是什么原因,怎么处理啊
...全文
211 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
老白猫 2012-04-19
  • 打赏
  • 举报
回复

感谢了,晚上为个问题亲手敲代码 ~
tengguanbing 2012-04-19
  • 打赏
  • 举报
回复
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);
老白猫 2012-04-19
  • 打赏
  • 举报
回复
好啦,一晚上安装楼上的思路终于搞定了 ,太墨迹了这些数据。。。。
tengguanbing 2012-04-19
  • 打赏
  • 举报
回复
编译器会用科学技术法来计数,我个人的建议,自己定义下
思路:分2部分计算 整数部分 和小数部分 然后拼接起来
老白猫 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 12 楼 的回复:
不知道。。 但做的不能留危险的缝隙啊 万一呢 呢呢。。


总得有个限吧。你要是这样没限,那,啥程序也没法写。

真要那样,你就用字符串保存数值。想多长都可以。嘿,,,要加减乘除,就再写一个函数。
[/Quote]
是不是表示浮点数的字符串可以相减却不能相加对吧??
oldtab 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
不知道。。 但做的不能留危险的缝隙啊 万一呢 呢呢。。
[/Quote]

总得有个限吧。你要是这样没限,那,啥程序也没法写。

真要那样,你就用字符串保存数值。想多长都可以。嘿,,,要加减乘除,就再写一个函数。
老白猫 2012-04-19
  • 打赏
  • 举报
回复
怎么换 小数点乃
lhy 2012-04-19
  • 打赏
  • 举报
回复
转成64位整数。
老白猫 2012-04-19
  • 打赏
  • 举报
回复
不知道。。 但做的不能留危险的缝隙啊 万一呢 呢呢。。
lhy 2012-04-19
  • 打赏
  • 举报
回复
会有那么多位的金钱吗?津巴布韦币?
老白猫 2012-04-19
  • 打赏
  • 举报
回复
木错,各种检验都指向是精度问题,存储的字节数多了就果断给截掉了 这是个问题。。。 这个事关金钱啊,精确度没了是杀人啊
xjq2003 2012-04-19
  • 打赏
  • 举报
回复
应该是浮点数据显示精度的问题,vc好像没有这个问题,
目前 俺也无能为力***
ccrun.com 2012-04-18
  • 打赏
  • 举报
回复
转换成double类型再减吧。
老白猫 2012-04-18
  • 打赏
  • 举报
回复
long double 和 double 一样的这里
lhy 2012-04-18
  • 打赏
  • 举报
回复
转换成long double试试。
老白猫 2012-04-18
  • 打赏
  • 举报
回复
不懂 不懂 不明白 数据太长了? 长数据没法处理了?
老白猫 2012-04-18
  • 打赏
  • 举报
回复
换了也不清楚啊 上面代码就是
rickys2080 2012-04-18
  • 打赏
  • 举报
回复
转换成double类型再减吧。
老白猫 2012-04-18
  • 打赏
  • 举报
回复

double c = 123456789123456.1234;
double d = 123456789012345.0123;
ShowMessage(c); // 123456789123456
ShowMessage(c-d); // 111111.109375..


AnsiString c = "123456789123456.1234";
AnsiString d = "123456789012345.0123";
double ce = StrToFloat(c);
double de = StrToFloat(d);
ShowMessage(c); // 123456789123456.1234
ShowMessage(c-d); // 111111.109375 ..
ShowMessage(ce); // 123456789123456
ShowMessage(de); // 123456789012345
ShowMessage(ce-de);// 111111.109375


怎么弄都不对
内容概要:本文系统研究了虚拟同步发电机(VSG)的惯量-阻尼协同自适应并网控制策略及其稳定性分析,聚焦于提升高比例可再生能源接入背景下电网的频率稳定性。通过Simulink仿真平台与Matlab代码实现,构建了VSG并网系统的动态模型,深入探讨了惯量与阻尼参数的自适应调节机制,以优化系统对频率波动的响应能力。研究涵盖了双机并联VSG的功率精确分配、微电网黑启动过程、虚拟阻抗的引入以及预同步控制等关键技术,并结合根轨迹分析与调节系数对比,验证了所提控制策略在提升系统稳定性和动态性能方面的有效性。文章强调了协同自适应控制在现代电力系统中的关键作用,为微电网和分布式能源系统的稳定运行提供了理论支持和技术方案。; 适合人群:具备电力系统、自动控制或新能源并网等相关专业知识背景,熟悉Matlab/Simulink仿真工具,从事电力电子、微电网控制、可再生能源并网等领域科研或工程应用的研发人员及研究生。; 使用场景及目标:①掌握VSG在微电网及并网系统中的高精度建模与仿真方法;②深入理解惯量-阻尼协同自适应控制对电网频率稳定的优化机制;③应用于微电网黑启动、功率均分控制、虚拟阻抗设计及预同步等实际工程场景的算法开发与性能验证; 阅读建议:建议结合提供的Matlab代码与Simulink模型进行同步仿真操作,重点关注参数自适应调节模块的设计逻辑、根轨迹稳定性分析及不同调节系数下的动态响应对比,以深化对控制策略内在机理的理解与实际应用能力。

13,872

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧