2016-04-26 20 views
1

たとえば、コンソールアプリケーションでIは、次のコードを持っている:私はダブルとして変数を定義し文字列に倍精度または整数がありますか?

function = "ceil(5.0)"; 

Console.Writeline("Enter function"); 
string function = Console.Readline(); 

、次いでfunctionは次のように定義されます。 しかし、ユーザーが何を入力した場合:私は、チェックを行うことができますどのように

function = "ceil(5)"; 

を私は今、どのようにその変数を格納するように充填ダブルまたは整数がある場合。また、それが同じであるが負の数であれば、私は既に正規表現を試しましたが、おそらく私は正しいことをしませんでした。何か案は?

+1

小数点の存在を検出するためにユーザーが入力した関数を解析するコードを変更しますか?確かに、あなたが関数パーサを書くことができるなら、それはあなたのためのケーキでなければなりませんか? – Heinzi

+0

@ Heinziありがとう、私はそれを調べるだろうが、例えば、5.0のようなものが二重に認識されていれば、それは実際には整数である。もし私が何を意味するのか知っていれば –

+0

私はあなたが何を意味するか知っている。そのような場合にはdoubleを使います:これは、 '5.0'のようなリテラルを使うとほとんどのプログラミング言語がそうしているので、その規約を変更するのは混乱します。 – Heinzi

答えて

3

浮動小数点数の場合、n%1 == 0は通常、小数点を超えたものがあるかどうかを確認する方法です。

public static void Main (string[] args) 
{ 
    decimal d = 3.1M; 
    Console.WriteLine((d % 1) == 0); 
    d = 3.0M; 
    Console.WriteLine((d % 1) == 0); 
} 

出力:

False //is a double 
True //is a integer 

詳しい情報は、このページで見つけることができます: How to determine if a decimal/double is an integer?

+1

私は質問者がそれを逆にしたいと思う、文字列が倍精度または整数を含んでいるかどうかをチェックする。二重整数が整数か小数点かをチェックしています。 – RvdK

0

あなたは正規表現を使用してそれを実行したい場合は、+機能+カッコ+値をチェックすることができclosing_parenthesis。これを開始点として確認してください:

ceil\((\-?\d{1,}(?:.\d{1,})?)\) 

Regexでは負の数値を使用できます。あなたがそれを望まないなら、\ - を削除してください。部分。

関連する問題