20-09-2019, Saat: 10:18
(18-09-2019, Saat: 13:20)serdar Adlı Kullanıcıdan Alıntı: merhaba arkadaşlar.
inputquery yöntemi ile aldığım değerin integer veya dobule olmasını istiyorum(kısacası sayısal değer).
Fakat aşağıdaki kodda "if not VarIsNumeric(s) then " satırı sayısal değere rağmen false döndürüyor.
Şartı dogru şekilde nasıl kontrol ettırebılırım.
bölme işlemi ile hata olusuyormu dıye bakmaktan daha kolay bır yolu vardır heralde diye düsünüyorum
var SifirlamaValues: TArray<string>; begin SetLength(SifirlamaValues, 1); if InputQuery('SIFIRLAMA DEĞERİNİZ GİRİNİZ',['1.Sayaç: '],SifirlamaValues, function(const AValues: array of string): Boolean var s: string; begin Result := True; for s in AValues do begin if not VarIsNumeric(s) then // bu satır sayısal değer girilse bile false döndürüyor.yanı begın bloguna gırıyor. begin Result := False; end; end; if not Result then begin MessageDlg('Sayısal Değer Girilmelidir', mtError, [mbOk], 0); end; end ) then begin Memo1.Lines.AddStrings(SifirlamaValues); end else begin Memo1.Lines.Add('Sayısal Değer Girilmedi'); end; end;
Sorunu @Fesih ARSLAN beyin önerisi ile aşabilmişsiniz ama; VarIsNumeric metodunun neden olumlu yanıt dönmediği hususu havada kalmış. Buna küçük bir izah getirmeye çalışalım.
Bu sorunun nedeni; VarIsNumeric metodu içine string tipli bir değişken geçiyor olmanız. Bu fonksiyon variant türünde bir parametre beklediği için variant haricindeki tüm tipler variant tipine implicit olarak cast ediliyor. Dolayısı ile VarIsNumeric metodunun içine geçilen parametre string değer içeren (VType'ı varUString olan) bir variant oluyor. Bu nedenle fonksiyondan olumlu bir yanıt dönmüyor.
Yukarıdaki kodunuzda VarIsNumeric metoduna geçilecek parametreyi bir string tip ile değilde; sayısal değer tutabilen herhangi bir tip ile geçmiş olsaydınız, sonucun olumlu olduğunu gözlemleyebilecektiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...

