002. Delphi 常用类型转换使用

  1. Delphi StrToIntDef 函数(字符串转整形,失败时返回默认值)

    形式 function StrToIntDef(const S: string; Default: Integer): Integer;
    
    引用单元 SysUtils.pas
    
    功能 返回字符串S转换成整数
    
    说明 字符串非整数表达时则返回默认值Default
    
    参考 procedure System.Val
    
    例子 SpinEdit1.Value := StrToIntDef(Edit1.Text, 0);
    
    返回int(Edit1.Text) 如果不成功,返回0
    
    例子代码:
    
    procedure TForm1.btn1Click(Sender: TObject);
    var
      i:Integer;
      S:string;
    begin
      edt2.Clear;
      for i:= 1 to Length(edt1.Text) do
      begin
        S:=IntToStr(StrToIntDef(Copy(edt1.Text,i,1), 0));
        edt2.Text:= edt2.Text + S  ;
      end;
    end;

  2. 如何强制 StrToInt、StrToIntDef

  3. 我有一个可以保存字符串或整数的变量。所以,我使用 If StrToIntDef(Value) > 0决定我是处理字符串还是整数。但这失败了,当字符串以“x”或“X”开头时。我假设是因为它认为它是一个十六进制数并将其转换为整数:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Value:integer;
      Str:string;
    begin
    
      Str:='string';
      Value:=StrToIntDef(Str,0); // Value = 0  OK
    
      Str:='xa';
      Value:=StrToIntDef(Str,0); // Value = 10 - NOT OK! Shuold be 0!
    
      Str:='XDBA';
      Value:=StrToIntDef(Str,0); // Value = 3514 - NOT OK! Shuold be 0!
    
    end;

 

如何使转换函数忽略十六进制值?

最佳答案

我认为为了安全起见,您应该验证每个字符都是一个数字。

function StrToIntDefDecimal(const S: string; Default: Integer): Integer;
var
  C: Char;
begin
  for C in S do
    if ((C < '0') or (C > '9')) and (C <> '-') then
    begin
      Result := Default;
      exit;
    end;
  Result := StrToDef(S, Default);
end;

但是,如果您只是想检测字符串是否为数字,那么您可以这样做:
function IsDecimalInteger(const S: string): Boolean;
var
  C: Char;
begin
  for C in S do
    if ((C < '0') or (C > '9')) and (C <> '-') then
    begin
      Result := False;
      exit;
    end;
  Result := True;
end;

即使这是不完美的,因为它会允许像 '1-2' 这样的值。 .但我确信你可以修改代码以只接受 '-'作为第一个字符。

另请注意,您现有的数字测试 StrToIntDef(Value) > 0 , 将零或负数视为字符串。这真的是你的意图吗。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值