为什么我从一个DW把数字转到另一个DW后小数部分没有了呢,如何解决?

scan30 2003-10-17 10:08:19
我用getitemdecimal把数字从DW提取出来,然后用setitem转到另一个DW后,其小数部分总是显示不出,我已试过用DW中的EDITMASK属性和FORMAT属性;这是为什么呢?
...全文
89 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
workhand 2003-10-17
  • 打赏
  • 举报
回复
两个字段,变量的类型要匹配,format注意一下
wantsong 2003-10-17
  • 打赏
  • 举报
回复
你定义一个double的变量接一下
在放进去
另外xd_dj的类型是什么?
若xsdj为number(5,2),xd_dj为number(7,0)
就会错
scan30 2003-10-17
  • 打赏
  • 举报
回复
n=ccd.insertrow(0)
ccd.setitem(n,"xd_dj",khsp.getitemdecimal(khsp.getrow(),"xsdj"))

我在窗口上临时设置了一个编辑框,可以看到提取的是带小数的,而且我从我从文本筐用DEC()提取数字到DW也没有小数,如提取5.66,它就自动进位到6了,在FORMAT中我设置成####.00
fmilan 2003-10-17
  • 打赏
  • 举报
回复
get到的变量保留到几位?是不是dec{小数位数}?还有新的DW中字段属性是不是也是dec?format设置了没有?
chrisfy 2003-10-17
  • 打赏
  • 举报
回复
你利用getitemdecimal函数提取的数据后在负值的时候是不是未负给decimal型变量而负给了整型变量,然后再setitem进另一个DW,这样就会发生你述的那种情况
klbt 2003-10-17
  • 打赏
  • 举报
回复
【另一个DW】也要设置编辑格式或显示格式。
//--------------------------------------------------------------------------- #include #pragma hdrstop #include #include #include #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- AnsiString TForm1::num_str(Variant ls) { AnsiString dx_sz,dx_dw,str_int,str_dec,dx_str,fu; AnsiString a,b,b2,c,d; int num_int,num_dec,len_int,i,a_int,pp; //dx—str为返回字符串 dx_sz="零壹贰叁肆伍陆柒捌玖"; dx_dw="万仟佰拾亿仟佰拾万仟佰拾元"; //dx_dw="元拾佰仟万拾佰仟亿拾佰仟万"; //处理金额小于零情况 if (ls0)&&(ls0) str_int=dx_str.SubString (1,dx_str.AnsiPos(".")-1);} else str_int=dx_str; num_int=StrToInt(str_int*100)/100; str_int=(str_int*100)/100; //取得小数值及小数串 if ((ls>0)&&(ls<1))num_dec=ls*100; else num_dec=(ls-num_int)*100; str_dec=IntToStr(num_dec); // ShowMessage(str_dec); len_int=str_int.Length(); dx_str=""; // ShowMessage(len_int); // ShowMessage((ls-num_int)*100); //转换整数部分 // for i:=1 to len—int do for (i=1;i<=len_int;i++) { //a为小写数字字符,b为对应的大写字符 //c为对应大写单位,d为当前大写字符串的最后一个汉字 a=str_int.SubString(i,1); a_int=StrToInt(a); b=dx_sz.SubString((a_int*2+1),2);// b=copy(dx_sz,(a_int2+1),2); c=dx_dw.SubString(((14-len_int+i-1)*2-1),2); if(dx_str!="")d=dx_str.SubString((dx_str.Length()-1),2); else d=""; if ((b=="零")&&((d=="零")||(b==b2)||(c=="元")||(c=="万")||(c=="亿"))) b=""; if ((a=="0")&&(c!="元")&&(c!="万")&&(c!="亿"))c=""; if (((c=="元")||(c=="万")||(c=="亿"))&&(d=="零")&&(a=="0")) {dx_str=dx_str.SubString(1,dx_str.Length()-2); d=dx_str.SubString(dx_str.Length()-1,2); if (((c=="元")&&(d=="万"))||((c=="万")&&(d=="亿")))c=""; } dx_str=dx_str+b+c; b2=b; // ShowMessage(a+";"+b+";"+c+";"+d); } //处理金额小于1的情况 if (dx_str.Length()<=2)dx_str=""; //转换小数部分 if ((num_dec0)) { a_int=StrToInt(str_dec); //ShowMessage(a_int); b=dx_sz.SubString((a_int*2+1),2); if (num_dec==0) dx_str=dx_str+"整"; if(num_dec>0)dx_str=dx_str+"零"+b+"分"; } if(num_dec>=10) { a_int=StrToInt(str_dec.SubString(1,1)); a=dx_sz.SubString((a_int*2+1),2); a_int=StrToInt(str_dec.SubString(2,1)); b=dx_sz.SubString((a_int*2+1),2); if (a!="零")a=a+"角"; if (b!="零")b=b+"分"; else b=""; dx_str=dx_str+a+b; } if (ls==0) dx_str="零元整"; dx_str=fu+dx_str; //函数返回字符串 return dx_str; } void __fastcall TForm1::Button1Click(TObject *Sender) { Edit2->Text=num_str(Edit1->Text); ShowMessage(Edit2->Text); } //---------------------------------------------------------------------------

609

社区成员

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

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