文本及数字
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
上一篇:运行出错了?/ 下一篇:窗体不见了是怎么回事!!