当前位置:主页>delphi7/进销存和数据库> 文章内容

文本及数字

发布时间:2010-01-24 | QQ免费站
1楼: 1.文本 要在大屏幕显示一个长的文本。我的方法:一次取一定量的文字,定时更换。 问题: 截取文本结尾或开头时正好取到半个汉字,于是大屏幕出现乱码。 解决思路: 能否将文本内容每个字符都变成双字节的?(怎么办?) 不用每次截取部分文本的方法,还有其他更好的办法吗? 2.数字 SQL SERVER中的一个表,其中有数字字段,decimal型两位小数, 可在界录入时:“18.90”,总是:“18.89”,只能录入:“18.901”才 保存为:“18.90”。使我很茫然?......一头雾水 字串6

2楼: 把文本定义宽字符再JIE取。。

字串9

3楼: 在截的时候可以判断最后一位的Ord是否大于126,如果是,就是汉字的第一字节,多截一位就可以了。 字串6

4楼: 稍具体一些好吗? 字串5

5楼: 1、将文本定义成WideString型。 2、将数字字段改成money型。
字串4

6楼: 你好!很感兴趣你的涉及行业。希望下面算法对你有用。你可以简化。 1,文本: 我还是用每次截取部分文本的方法。文本也是单字节流。不过,把要截取的文本当作队列。长度为LENGTH,偶数。每次刷新队列时第一个字符去掉,最后一个字符后补上下一个字符。就是一个先进先出的队列。算法伪码如下: timer(2s) { Flag := False;//当前的变量:文本 的值的第一个字符为汉字的标志。 if 文本第一个字节是汉字的第一个字节 then //文本是一个变量 begin 文本 := 文本去掉前两个字节; Flag := True; end else 文本 := 文本去掉第一个字节; if 文本下一个字节是汉字的第一个字节 then if Flag then 文本 := 文本+后面两个字节; else begin if Flag then begin 文本 := 文本+后面第一个字节; if 文本下一个字节是汉字的第一个字节 then //文本是一个变量 else 文本 := 文本+后面第一个字节; end else 文本 := 文本+后面第一个字节; end; } 2,数字: 原因我不知道。不过检查方法应该是:首先检查界面用来输入的控件如何转换输入值。例如是否是字符串转换成数字,是否四舍五入截取位数。然后同样检查写数据库语句UPDATE\INSERT,同上。然后检查数据库定义是否定义为两位小数和四舍五入等其他设置。最后,如果,没有发现问题,那么,也许你用的数据库盗版不好:) 呵呵 希望对你有用! 字串5

7楼: 检查是否汉字第一个字节的方法同Corn2,自己从编码方法中查准确方法.第一次取字符串(文本)时要判断最后一个字节是否汉字第一个字节.如果是,文本去掉最后一个字节
字串6

8楼: 2.数字:SQL SERVER中的一个表,其中有数字字段,decimal型两位小数, 可在界录入时:“18.90”,总是:“18.89”,只能录入:“18.901”才 保存为:“18.90”。使我很茫然?......一头雾水 我也遇到过,在建立表字段的精度问题,增强精度即可解决 字串4

9楼: 2.你的录入界面是用什么方法往数据库写数据的? 字串8

10楼: “2.你的录入界面是用什么方法往数据库写数据的? ” 我用append增加空记录,再用:edit和post保存的 其实在输入数字(用DBEdit1录入那种数字字段)时就出现了,根本轮不到按“保存”按钮。
字串4

11楼: 我用dbedit没有啥问题啊。
字串9

12楼: Corn2:在截的时候可以判断最后一位的Ord是否大于126,如果是,就是汉字的第一字节,多截一位就可以了。 我如下一试: procedure TForm1.Button1Click(Sender: TObject); var S:STRING; begin //字符的ASCII为:126时 S:=‘1234公司,.ertw,。‘; S:=COPY(S,1,1); //S:=COPY(S,5,1); //用此行代码仍不可以运行 S:=‘:ASCII为: ‘ + IntToStr(Ord(S)); //此处出现类型不对的提示 MessageDlg(S, mtInformation, [mbOk], 0); end; 以上试验都不成功,变量“S”:应该是什么类型?仅是变量的类型不对吗? 大侠,是我代码有什么问题吧。
字串4

13楼: S:=‘:ASCII为: ‘ + IntToStr(Ord(S[5])); //此处出现类型不对的提示 如果s[5]>126那么多取得一个byte。 字串1

14楼: TO tjlqp 应该为char,ord只能转换char类型的。 字串4

15楼: 1:用widestring是双字节的 2:把数据类型该为money型,因为浮点行如果要存2他会保存成1。999999999。。。的
字串1

16楼: hys_peter:“用widestring是双字节的“ 你是说:将数据字段设为:“widestring是双字节”?怎么设? 对不起,我还真是...笨。 字串4

17楼: 代码贴出来,帮你改。 字串8

18楼: str = ‘我爱u‘; Length(str)为5 Length(WideString(str))为3
字串8

19楼: 我想显示文本的问题有进展了,如下: procedure TForm1.Button1Click(Sender: TObject); var S:STRING; begin //字符的ASCII为:126时 S:=‘1234公司,.ertw,。‘; S:=‘:ASCII为: ‘ + IntToStr(Ord(S[1])); //此处出现类型不对的提示 MessageDlg(S, mtInformation, [mbOk], 0); end; “Ord(S[n])” 可以返回字符串中第n个字节的ASCII码,如果:Ord(S[n]>126,则说明 取到了半个汉字,这样就可以判断所取文字块的开头及结尾是否取到半个汉字,视情况 向后或向前多取一个字节即可。 对否,大侠指正。 第二个数字问题,“设为钱型”,这个想法很好,待我试试。应该没问题。
字串6

20楼: 使用unicode字符集 编程时字符串变量使用Widestring 数据库里数据类型使用nvarchar或者nchar 字串6

21楼: to tjlqp, 我的标号1是说第一个问题,文本用widestring类型, 标号2说的是你第二个问题 当然,您要是用widestring当数字用也不是不可以呀,更准确了,不过经常转换麻烦点 1:用widestring是双字节的 2:把数据类型该为[red]money[/red]型,因为浮点行如果要存2他会保存成1。999999999。。。的 字串6

22楼: hys_peter: 我将经表示的文本全部COPY到一个:wb0:widestring型的变量中,每次取800个文字做为一页用来显示,如此这般,当前还没看出问题。过二天,考验考验,旦願通过。 大侠,你说是这意思吗?

字串8

23楼: 大虾还可以!大侠不敢当,不过800个字可能可以,一般不超过2048我忘了是字节还是其他的东西了,现在可以就成。一般有个unicode的控件,主要是为了支持多语种的,试试吧,应该没事了
字串8

24楼: 给点资料: DELPHI基础开发技巧(三) 1、计算字符串中中文的字数 function TotalChineseCount(ans: AnsiString): Integer; var  wis: WideString; begin  wis := WideString( ans );  Result := Length( ans ) - Length( wis ); end;
字串2