翻译代码为vb

wzllin111 2017-04-29 01:28:15
String __fastcall of_yxsz46(double Sz,int YXWS)
{
/* 设置特定数值(sz)的有效位数 */
/* Sz:数值;ysws:有效位数; Fh:符号; jw:进位标志 */
String Csz ,Csz1 ,Csz2 ,Fh ="";
int Is_Point=0,j ,L0=0;
String RetVal;
Boolean Jw = False;
double csz=Sz;
if(Sz < 0) // 保存符号
{
Fh = '-';
Sz = - Sz;
}
Csz =FloatToStr(Sz).Trim();
int LEN=Csz.Length();
if (Csz.Pos("E")>0)
{
if (Csz.SubString(Csz.Pos("E")+1,1)=="-")
{
int fcs=StrToInt(Csz.SubString(Csz.Pos("E")+2,LEN-(Csz.Pos("E")+1)));
String str="0.";
for (int j=1;j<fcs;j++)
str=str.Trim()+"0";
Csz=str.Trim()+Csz.SubString(1,Csz.Pos(".")-1)+Csz.SubString(Csz.Pos(".")+1,Csz.Pos("E")-(Csz.Pos(".")+1));
}
else if (Csz.SubString(Csz.Pos("E")+1,1)=="+")
{
int zcs=StrToInt(Csz.SubString(Csz.Pos("E")+2,LEN-(Csz.Pos("E")+1)));
int zws=Csz.Pos("E")-Csz.Pos(".");
if (zcs-zws>=0)
{
String str="";
for (int j=1;j<=(zcs-zws);j++)
str=str.Trim()+"0";
Csz=Csz.SubString(1,Csz.Pos(".")-1)+Csz.SubString(Csz.Pos(".")+1,Csz.Pos("E")-(Csz.Pos(".")+1))+str.Trim();
}
else
Csz=Csz.SubString(1,Csz.Pos(".")-1)+Csz.SubString(Csz.Pos(".")+1,zcs)+"."+Csz.SubString(Csz.Pos(".")+1+zcs,Csz.Pos("E")-(Csz.Pos(".")+1+zcs));
}
}
LEN=Csz.Length();
for (int i=0;i<LEN;i++) // 小数点的位置
{
if (Csz.SubString(i+1,1)==".")
{
Is_Point=i+1;
break;
}
}
if (Is_Point<LEN)
Csz=Csz.SubString(1,Is_Point-1).Trim()+Csz.SubString(Is_Point+1,LEN-Is_Point).Trim(); // 去除小数点
for (int i=0;i<LEN;i++)
{
if (Csz.SubString(i+1,1)!="0")
{
L0=i;
break;
}
}
if (L0>0) // 去除左边的零
Csz=Csz.SubString(L0+1,LEN-L0).Trim();
Csz1=Csz.SubString(1,YXWS).Trim();
Csz2=Csz.SubString(YXWS+1,LEN-YXWS).Trim(); // 有效位的右边
if (Csz2=="")
{
if (Is_Point==0)
{
if (Csz1.Length()<YXWS)
{
String str;
for (int i=1;i<=YXWS-Csz1.Length();i++)
str=str+"0";
return FloatToStr(csz)+"."+str.Trim();
}
else
return FloatToStr(csz);
}
else
{
if (Csz1.Length()<YXWS)
{
String str;
for (int i=1;i<=YXWS-Csz1.Length();i++)
str=str+"0";
for (int i=0;i<=L0-1;i++)
RetVal=RetVal+"0";
RetVal=RetVal+Csz1+Csz2;
if (Is_Point>0) // 放入小数位
{
if (L0+YXWS<Is_Point)
RetVal=RetVal.SubString(1,Is_Point-1);
else
RetVal=RetVal.SubString(1,Is_Point-1)+"."+RetVal.SubString(Is_Point,L0+YXWS-Is_Point+1);
}
return RetVal+str.Trim();
}
else
{
for (int i=0;i<=L0-1;i++)
RetVal=RetVal+"0";
RetVal=RetVal+Csz1+Csz2;
if (Is_Point>0) // 放入小数位
{
if (L0+YXWS<Is_Point)
RetVal=RetVal.SubString(1,Is_Point-1);
else
RetVal=RetVal.SubString(1,Is_Point-1)+"."+RetVal.SubString(Is_Point,L0+YXWS-Is_Point+1);
}
return RetVal;
}
}
}
int jwsz=StrToInt(Csz2.SubString(1,1)); // 有效位的右边
int jwsz1 = StrToInt(ReverseString(Csz1).SubString(1,1)); //四舍六入
if (jwsz==0||jwsz==1||jwsz==2||jwsz==3||jwsz==4) // 判断是否进位
Jw=false;
else if (jwsz==5||jwsz==6||jwsz==7||jwsz==8||jwsz==9)
Jw=true;

if (Jw==true) // 有进位
{
int i;
for (i=1;i<=Csz1.Length();i++)
{
if (Csz1.SubString(i,1)!="9")
break;
}
if (i>Csz1.Length()&&L0<1)
{
Is_Point++;
L0--;
}
else if (L0>=1&&i>Csz1.Length())
L0--;
Csz1=IntToStr(StrToInt(Csz1)+1);
if((jwsz1 % 2==0) && (jwsz==5))Csz1=IntToStr(StrToInt(Csz1)-1);
String str="";
for (int t=1;t<=Csz2.Length();t++)
str=str+"0";
Csz2=str.Trim();
}
else
{
String str="";
for (int t=1;t<=Csz2.Length();t++)
str=str+"0";
Csz2=str.Trim();
}
for (int i=0;i<=L0-1;i++)
RetVal=RetVal+"0";
RetVal=RetVal+Csz1+Csz2;
if (Is_Point>0) // 放入小数位
{
if (L0+YXWS<Is_Point)
RetVal=RetVal.SubString(1,Is_Point-1);
else
RetVal=RetVal.SubString(1,Is_Point-1)+"."+RetVal.SubString(Is_Point,L0+YXWS-Is_Point+1);
}
if (RetVal.Length()<YXWS) // 不足有效位补0
{
String str;
for (int i=1;i<=YXWS-RetVal.Length();i++)
str=str+"0";
RetVal=RetVal+"."+str.Trim();
}
RetVal=Fh+RetVal;
if(RetVal.SubString(RetVal.Length(),1)==".")
RetVal=RetVal.SubString(1,RetVal.Length()-1);
return RetVal;
}
...全文
335 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanta 2017-05-05
  • 打赏
  • 举报
回复
有需要,就能实现,无非是代价的问题。
王二.麻子 2017-05-04
  • 打赏
  • 举报
回复
这个函数不需要考虑fastcall的问题,不过是用vb重写那个函数。 明白c,c++的每个语句了,用vb等效的一个或者多个操作实现就可以了。 注意的有vb的整形和c的整形,符号数,字符串这些数据类型的区别
赵4老师 2017-05-03
  • 打赏
  • 举报
回复
java python c# php perl ruby asm pascal swift go matlab d cobol fortran erlang lua dart bash powershell foxpro 这些语言中,有哪个“不支持判断文件是否存在、文件读写和文件更名”?
赵4老师 2017-05-03
  • 打赏
  • 举报
回复
excel里的vba难道“不支持判断文件是否存在、文件读写和文件更名”?
of123 2017-05-03
  • 打赏
  • 举报
回复
至少 fastcall 约定在 VB 6.0 中无法实现。
赵4老师 2017-05-02
  • 打赏
  • 举报
回复
不服的话, 请翻译代码为: java python c# php perl ruby asm pascal swift go matlab d cobol fortran erlang lua dart bash powershell foxpro ……
赵4老师 2017-05-02
  • 打赏
  • 举报
回复
引用 2 楼 Chen8013 的回复:
[quote=引用 1 楼 bakw 的回复:] 坐等赵老师现身
等赵4来了,就只有说“A语言B语言”的事了。 [/quote] 为什么不说呢? 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
wzllin111 2017-05-02
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
[quote=引用 2 楼 Chen8013 的回复:] [quote=引用 1 楼 bakw 的回复:] 坐等赵老师现身
等赵4来了,就只有说“A语言B语言”的事了。 [/quote] 为什么不说呢? 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸! [/quote] 我要在excel里用vba
舉杯邀明月 2017-05-02
  • 打赏
  • 举报
回复
这个帖子是版主加的分么,开始就是100分的,楼主才1级,不可能再加分了。 楼主在发了帖子之后,都没来过了。 加分有什么意义。
舉杯邀明月 2017-05-02
  • 打赏
  • 举报
回复
这段代码用VB6实现,没有什么“难度”方面的问题。
of123 2017-05-02
  • 打赏
  • 举报
回复
做成 DLL 在 VB 中调用即可。
舉杯邀明月 2017-05-02
  • 打赏
  • 举报
回复
如果我有这个需要,那么就能“翻译”。
舉杯邀明月 2017-04-30
  • 打赏
  • 举报
回复
引用 1 楼 bakw 的回复:
坐等赵老师现身
等赵4来了,就只有说“A语言B语言”的事了。
笨狗先飞 2017-04-29
  • 打赏
  • 举报
回复
坐等赵老师现身

7,763

社区成员

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

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