50分请教为什么用pos()取出的的字符串(如:45.6)用strtofloat转换时老是提醒不是有效的浮点值?
50分请教为什么用pos()取出的的字符串(如:45.6)用strtofloat转换时老是提醒不是有效的浮点值?
楼主xuehan(冬天的雪)2002-05-14 14:29:37 在 Delphi / VCL组件开发及应用 提问字符串是从.htm文件中用pos()函数取出的,我要转成数值,用strtofloat转换时老是提醒不是有效的浮点值:"45.6 "is not a valid floating point value?另外,"45.6 "尾部的空字符用trim()也去不掉? 问题点数:50、回复次数:19Top
1 楼zswang(伴水清清)(专家门诊清洁工)回复于 2002-05-14 14:42:18 得分 0
看看你的代码
strtofloat() //上下语句Top
2 楼lizhenjia(暴雪)回复于 2002-05-14 14:45:56 得分 0
trim去不掉可能性不大Top
3 楼macro_love(光光)回复于 2002-05-14 14:49:45 得分 0
应该能去掉吧Top
4 楼xuehan(冬天的雪)回复于 2002-05-14 14:53:59 得分 0
取出雨情快讯.htm存入a中:
assignfile(thetxtfile,"雨情快讯.htm");
reset(thetxtfile);
while not eof(thetxtfile) do
begin
readln(thetxtfile,b);
a:=a+b;
end;
找到要得字符
yuliang:=copy(a,1,ttt-1);
yuliang_1:=strtofloat(yuliang);Top
5 楼taidy()回复于 2002-05-14 14:56:38 得分 0
我也遇到过同样的问题,那可能是个回车换行!trim确实去不掉,可么是个格式问题Top
6 楼xuehan(冬天的雪)回复于 2002-05-14 14:57:37 得分 0
取出雨情快讯.htm存入a中:
assignfile(thetxtfile,"雨情快讯.htm");
reset(thetxtfile);
while not eof(thetxtfile) do
begin
readln(thetxtfile,b);
a:=a+b;
end;
找到要得字符
ttt:=pos("<",e);
yuliang:=copy(a,1,ttt-1);
yuliang_1:=strtofloat(yuliang);
Top
7 楼webnumen(现代孔子)回复于 2002-05-14 15:06:58 得分 0
你的"45.6 "里面含有字符,当然出现错误啦,用trim函数去玩玩,试试看!Top
8 楼macro_love(光光)回复于 2002-05-14 15:07:10 得分 5
你这是回车不是空格我给你写个函数来去掉吧
function DeleteLineBreaks(const S: string): string;
var
Source, SourceEnd: PChar;
begin
Source := Pointer(S);
SourceEnd := Source + Length(S);
while Source < SourceEnd do
begin
case Source^ of
#10: Source^ := #32;
#13: Source^ := #32;
end;
Inc(Source);
end;
Result := S;
end;
这样就能去掉回车了Top
9 楼dreamfan(改行不做程序员,回家种地。)回复于 2002-05-14 15:10:31 得分 0
你取出的字符本来就不能转化成浮点型的,
Top
10 楼wildhorseli(野马笑了)回复于 2002-05-14 15:10:47 得分 0
你可以把不行的一行的代码写出来,大家好看看,作一下试验就可以,ok?Top
11 楼zswang(伴水清清)(专家门诊清洁工)回复于 2002-05-14 15:13:33 得分 0
ttt:=pos("<",e);
yuliang:=copy(a,1,ttt-1);
yuliang_1:=strtofloat(Trim(yuliang)); //建议使用StrToFloatDef()Top
12 楼fyje(云中仙)回复于 2002-05-14 15:16:31 得分 0
最后那个空字符不是真正的空格,可能是半字符,你可以在pos里面长度少取一位就成了Top
13 楼qybao(阿宝)回复于 2002-05-14 15:21:49 得分 0
建议你重新获得你的字符串
var
tmp: string;
loop: Integer;
begin
tmp := "";
for loop := 1 to length(yuliang) do
begin
if Pos(Copy(yuliang,loop,1),"0123456789.")>0 then
tmp := tmp+Copy(yuliang,loop,1);
end;
yuliang_1:=strtofloat(tmp);
end;Top
14 楼ssgang(大刚)回复于 2002-05-14 15:24:14 得分 30
strtofloat(copy("*.htm,Pos("45.6","*.htm"),4))
这样不可以吗?Top
15 楼xuehan(冬天的雪)回复于 2002-05-14 15:33:19 得分 0
macro_love(如风):你的函数还是去不掉后面的东东
zswang(伴水)(* 嘻 *) :StrToFloatDef()通不过,好象没有这个函数
Top
16 楼zswang(伴水清清)(专家门诊清洁工)回复于 2002-05-14 15:49:10 得分 15
这个函数是Delphi6才有的
你可以参考qybao(阿宝)的代码
var
T: string;
I: Integer;
begin
//....
T := "";
for I := 1 to Length(yuliang) do
if yuliang in then
T := T + yuliang;
yuliang_1 := StrToFloat(T);
//....
end;
Top
17 楼xuehan(冬天的雪)回复于 2002-05-14 16:08:40 得分 0
ssgang(大刚) :实在抱歉,30分给错了,给到ssgang(大刚) 上了,我重发个帖子,你上来答一条,我给你50分!!Top
18 楼xuehan(冬天的雪)回复于 2002-05-14 16:10:47 得分 0
qybao(阿宝) :实在抱歉,30分给错了,给到ssgang(大刚) 上了,我重发个帖子,你上来答一条,我给你50分!!
qybao(阿宝) :实在抱歉,30分给错了,给到ssgang(大刚) 上了,我重发个帖子,你上来答一条,我给你50分!!
qybao(阿宝) :实在抱歉,30分给错了,给到ssgang(大刚) 上了,我重发个帖子,你上来答一条,我给你50分!!
qybao(阿宝) :实在抱歉,30分给错了,给到ssgang(大刚) 上了,我重发个帖子,你上来答一条,我给你50分!!
qybao(阿宝) :实在抱歉,30分给错了,给到ssgang(大刚) 上了,我重发个帖子,你上来答一条,我给你50分!!
Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
