2013-08-05 22 views
0

我有一个代码允许'。' (点)在仅号码输入在控制台

string _val = ""; 
Console.Write("Enter your value: "); 
ConsoleKeyInfo key; 

do 
{ 
    key = Console.ReadKey(true); 
    if (key.Key != ConsoleKey.Backspace) 
    { 
     double val = 0; 
     bool _x = double.TryParse(key.KeyChar.ToString(), out val); 
     if (_x) 
     { 
      _val += key.KeyChar; 
      Console.Write(key.KeyChar); 
     } 
    } 
    else 
    { 
     if (key.Key == ConsoleKey.Backspace && _val.Length > 0) 
     { 
      _val = _val.Substring(0, (_val.Length - 1)); 
      Console.Write("\b \b"); 
     } 
    } 
} 
while (key.Key != ConsoleKey.Enter); 

Console.WriteLine(); 
Console.WriteLine("The Value You entered is : " + _val); 

只允许数量的输入。但是我怎样才能允许'。'(点)符号,因为我想用浮点数来处理?

+2

一般来说,你在做这种奇怪。你得到了被按下的实际键,但是你可以使用'Console.ReadLine()'来读取所有的用户输入。那么你会没有问题,像1049.4839 – evanmcdonnal

+0

读取值,但我怎么可以在这种情况下禁止信件? –

+0

@evanmcdonnal看起来他正试图过滤用户输入的内容。就像不允许键入字母一样。 – Steve

回答

-1
if ((key.KeyChar >= 48 && key.KeyChar <= 57) || key.KeyChar == 46) 
    { 
     _val += key.KeyChar; 
     Console.Write(key.KeyChar); 
    } 
+1

你不应该使用这样的幻数。读者完全不清楚这些数字的含义。相反,您可以简单地使用像'char.IsDigit'这样的方法,或者在小数点的情况下将char与实际字符相比较,而不是数字表示。 – Servy

+0

@Servy我同意你对不明确代码的评论。但我认为你写了关于问题的答案。这帮助我们更多。谢谢。 – cutefather

+0

@cutefather:如果你打算这么做,那么至少应该是'0','9'和'。'。 – Guvante

0
string _val = ""; 
Console.Write("Enter your value: "); 
ConsoleKeyInfo key; 
do 
{ 
    key = Console.ReadKey(true); 

    if (char.IsNumber(key.KeyChar) || key.KeyChar == '.') 
    { 
     _val += key.KeyChar; 
     Console.Write(key.KeyChar); 
    } 
    else 
    { 
     if (key.Key == ConsoleKey.Backspace && _val.Length > 0) 
     { 
      _val = _val.Substring(0, (_val.Length - 1)); 
      Console.Write("\b \b"); 
     } 
    } 
} 
+0

这应该解决你的问题兄弟 – nordx