检测字符串是否包含浮点数?

时间:2013-11-26 22:14:52

标签: delphi delphi-xe4

如何检测字符串是否包含浮点数。例如:'0.004'

但是没有使用StrToFloat,因为该函数很慢,而是通过迭代迭代。

function IsInteger(const S: String): Boolean;
var
  P: PChar;
begin
  P := PChar(S);
  Result := True;
  while not (P^ = #0) do
  begin
    case P^ of
      '0'..'9': Inc(P);
    else
      Result := False;
      Break;
    end;
  end;
end;

这将检查字符串是否为正整数但不是浮点数。

3 个答案:

答案 0 :(得分:6)

我会使用TryStrToFloat():

if TryStrToFloat(str, value, FormatSettings) then
  ....

如果您准备使用默认的系统范围格式设置,则可以省略最终参数:

if TryStrToFloat(str, value) then
  ....

答案 1 :(得分:2)

你能在这里使用RegEx吗?类似的东西:

([+-]?[0-9]+(?:\.[0-9]*)?) 

答案 2 :(得分:0)

这个问题的问题在于说“太慢”并不能说明问题。探查者告诉你什么?您对输入数据有一个明智的想法吗?那么不同的符号呢,例如6.02e23

如果你的输入数据主要是噪音,那么使用正则表达式(如here所述)可能会改善一些事情,但只能作为第一个过滤器。然后,您可以添加第二步以实际获取您的号码,如David's answer所述。