C# Sayı mı? Kontrolü (Function IsNumeric)
C# ile programlama yapıyorsanız kelime katarlarının (string) sayısal bir değer olup olmadığını kontrol etmek isteyebilirsiniz. Aşağıdaki aşırı yüklenmiş fonksiyon örneğini kullanarak, bir kelime katarının (string) veya bir karakterin (char) sayısal bir değer olup olmadığını öğrenebilirsiniz.
public static bool IsNumeric(char c)
{
if (c > 57 || c < 48)
return false;
return true;
}
public static bool IsNumeric(string s)
{
char nns = System.Globalization.CultureInfo
.CurrentCulture.NumberFormat.NegativeSign[0];
char dcs = System.Globalization.CultureInfo
.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
int nnsi = s.IndexOf(nns);
if (nnsi > 0)
return false;
if(nnsi == 0)
s = s.Remove(nnsi, 1);
char[] c = s.ToCharArray();
if (c[0] == dcs || c[c.Length-1] == dcs)
return false;
int dcsc = 0;
for (int i = 0; i < c.Length; i++)
{
if (c[i] > 57 || c[i] < 48)
{
if (c[i] != dcs)
return false;
else
dcsc++;
}
if (dcsc > 1)
return false;
}
return true;
}
Bu foksiyonlar yalnızca tamsayılarda işe yarar..
Mustafa bey uyarınız için teşekkür ederim. Evet yukraıdaki fonksiyon sadece tam sayıları tespit edebilir. Ufak bir eklenti ile ondalıklı sayıları da tespit edebilecek hale getirebiliriz.
Yukarıdaki fonksiyon ondalıklı ve negatif sayıları (”1″, “-1″, “-1,0″, “1,0″ vb…) tespit edebilecek şekilde yeniden düzenlenmiştir.
private bool IsNumeric(object pobjIn)
{
bool isNumeric;
double dblResult;
isNumeric = Double.TryParse(Convert.ToStringpobjIn),
System.Globalization.NumberStyles.Any,
System.Globalization.NumberFormatInfo.InvariantInfo,
out dblResult);
return isNumeric;
}
sanırım biraz daha kısa?
bu arada özür dilerim sanırım tek satıra yazınca metni biraz tasarım bozuldu..
Char.IsDigit(Char c) diye hali hazırda bir fonksiyon var çok daha kolay bir foreachle işi bitirebiliyorsunuz.
Ör
string a = “2316811616351″;
string b = “s351kdf24sdsd”;
foreach(Char ch in a)
Char.IdDigit(ch); //Return Value(True or False)
foreach(Char ch in b)
Char.IdDigit(ch); //Return Value(True or False)
Teşekkürler Salih…