文字列が数値かどうかを識別する


731

これらの文字列がある場合:

  1. "abc" = false

  2. "123" = true

  3. "ab2" = false

IsNumeric()文字列が有効な数値であるかどうかを特定できるようなコマンドはありますか?


79
それらの例から、文字列全体が数値を表すかどうかを確認できます。
ルーカス

47
str.All(Char.IsDigit);を返します。
Mohsen 2013年

13
str.All(Char.IsDigit)は、「3.14」をfalse、「-2」と「3E14」と宣言します。「0x10」
Harald Coppoolse、2014年

4
チェックする番号のタイプによって異なります。セパレータなしの整数(つまり、10進数の文字列)の場合、このチェックは機能し、受け入れられた回答とOPで暗黙的に示されている回答と同じです。
Alex Mazzariol 2015

1
@ルーカス、コメントありがとうございます。文字列をintとして2倍に解析しようとして、なぜ失敗したのか疑問に思いました...
Novastorm

回答:


1160
int n;
bool isNumeric = int.TryParse("123", out n);

C#7以降の更新

var isNumeric = int.TryParse("123", out int n);

または、番号が必要ない場合は、outパラメータを破棄できます

var isNumeric = int.TryParse("123", out _);

var sが、それぞれのタイプに置き換えることができます!


126
ただし、数値を表すかどうかを知りたいので、double.TryParseを使用します。
John Gietzen、2009年

5
文字列を「-123」または「+123」として渡すと、関数はtrueを返します。整数には正と負の値があることを理解しています。しかし、この文字列がユーザーが入力したテキストボックスからのものである場合、falseを返します。
user2323308 2013

9
これは、ユーザーが-2,147,483,648から2,147,483,647を超える値を入力するまでは適切な解決策であり、その後、警告なしに失敗します
BlackTigerX

0,60(コンマです!)を解析してみてください。これは無効な数値ですが、60として解析されます!
Paul Zahra、

2
私はこのチェックに拡張メソッドを使用することを好みます: public static bool IsNumeric(this string text) { double _out; return double.TryParse(text, out _out); }
Hamid Naeemi

350

これinputは、すべての数値の場合にtrueを返します。かそれ以上かどうかはわかりませんが、TryParse動作します。

Regex.IsMatch(input, @"^\d+$")

1つ以上の数字が文字と混在しているかどうかを知りたいだけの場合は、^ +およびを省略し$ます。

Regex.IsMatch(input, @"\d")

編集: 実際には、非常に長い文字列がTryParseをオーバーフローする可能性があるため、TryParseよりも優れていると思います。


2
ただし、正規表現を1度に作成する方がはるかに効率的です。
クレメント

2
@CFP +1 ...適用可能な場合、RegExは通常の関数より常に優れています!
MAXE

19
@MAXE:同意しません。正規表現のチェックは非常に遅いため、パフォーマンスを検討している場合は、より良い解決策がしばしばあります。
Michal B.

7
編集:RegexOptions.Compiled速度を上げるためにこれらの何千も実行している場合は、パラメーターとして追加できますRegex.IsMatch(x.BinNumber, @"^\d+$", RegexOptions.Compiled)
Simon_Weaver

9
ネガや以下のものでも失敗します.
ノクティス

199

次のものも使用できます。

stringTest.All(char.IsDigit);

入力文字列が何らかの英数字である場合trueは、すべての数字(以外float)に対して返されますfalse

stringTestこれは数値であるというテストに合格するため、空の文字列であってはなりません。


20
それはとてもクールです。ただし、注意する必要があるのは、空の文字列はそのテストを数値として渡すことです。
dan-gph 2015年

2
@ dan-gph:嬉しいです、あなたはそれが好きです。はい。それで合っています。上記のメモを更新しました。ありがとう!
Kunal Goel 2015

1
これは、10進数の場合にも機能しません。正しいテストはstringTest.All(l => char.IsDigit(l)|| '。' == l || '-' == l);になります。
Salman Hasrat Khan、2016

入力してくれたSalmanに感謝します。文字列の10進数を具体的にチェックするには、-if(Decimal.TryParse(stringTest2、out value)){/ *はい、10進数/} else {/いいえ、10進数ではありません* / }
Kunal Goel 2016

6
サルマン、それはそれほど単純ではありません-これは..--..--有効な数値として渡されます。明らかにそうではありません。
Flynn1179

133

この関数を何度か使用しました。

public static bool IsNumeric(object Expression)
{
    double retNum;

    bool isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
    return isNum;
}

ただし、使用することもできます。

bool b1 = Microsoft.VisualBasic.Information.IsNumeric("1"); //true
bool b2 = Microsoft.VisualBasic.Information.IsNumeric("1aa"); // false

IsNumericオプションのベンチマークから

代替テキスト
(ソース:aspalliance.com

代替テキスト
(ソース:aspalliance.com


80
C#アプリからMicrosoft.VisualBasic.dllを参照していますか?eww:P
ルーカス

「IsNumeric」は問題なく動作します。また、TryParseとIsNumericの間の効率の違いはほとんどないこともわかります。TryParseは2.0の新機能であり、それ以前は、他のどの戦略よりもIsNumericを使用する方が良かったことに注意してください。
ネルソンミランダ

10
さて、VB.NETのIsNumeric()は、VB6の互換性のために(とりわけ)必要ないくつかの旋回の後、内部的にdouble.TryParse()を使用します。互換性が必要ない場合は、double.TryParse()を使用するのも同じくらい簡単で、プロセスでMicrosoft.VisualBasic.dllをロードすることによってメモリを浪費するのを防ぎます。
ユーロミセリ2009年

4
簡単な説明:基礎となる有限状態マシンを一度に構築できれば、正規表現を使用した方がはるかに高速になります。一般に、状態マシンの構築にはO(2 ^ n)を使用します。nは正規表現の長さですが、読み取りはO(k)で、kは検索する文字列の長さです。したがって、毎回正規表現を再構築するとバイアスが生じます。
クレメント

2
@Lucas実際には、完全なcsvパーサーのような、本当に素晴らしいものがいくつかあります。そこにあるのなら使わない理由はない。
Nyerguds 16

32

これはおそらくC#の最良のオプションです。

文字列に整数(整数)が含まれているかどうかを知りたい場合:

string someString;
// ...
int myInt;
bool isNumerical = int.TryParse(someString, out myInt);

TryParseメソッドは文字列を数値(整数)に変換しようとし、成功するとtrueを返し、対応する数値をmyIntに配置します。できない場合はfalseを返します。

int.Parse(someString)他の応答に示されている代替案を使用するソリューションは機能しますが、例外のスローは非常に高価であるため、はるかに遅くなります。TryParse(...)バージョン2でC#言語に追加されましたが、それまでは選択肢がありませんでした。今、あなたはそうします:したがって、あなたはParse()代替案を避けるべきです。

10進数を受け入れる場合は、10進数クラスにも.TryParse(...)メソッドがあります。上記の説明でintをdecimalに置き換えます。同じ原理が適用されます。


すべての文字を整数文字と比較するよりもTryParseの方が優れているのはなぜですか?
jimjim

25

問題の文字列が渡されるかどうかを確認するために、多くのデータ型に対して組み込みのTryParseメソッドをいつでも使用できます。

例。

decimal myDec;
var Result = decimal.TryParse("123", out myDec);

結果は= Trueになります

decimal myDec;
var Result = decimal.TryParse("abc", out myDec);

結果は= Falseになります


C#よりもVBスタイルの構文で多くのことを行ったと思いますが、同じルールが適用されます。
TheTXI 2009年

22

int.Parseやdouble.Parseを使いたくない場合は、次のようにして自分でロールすることができます。

public static class Extensions
{
    public static bool IsNumeric(this string s)
    {
        foreach (char c in s)
        {
            if (!char.IsDigit(c) && c != '.')
            {
                return false;
            }
        }

        return true;
    }
}

7
整数のみを意味する場合はどうなりますか?「。」のロケールについてはどうですか カンマではなくグループ区切り文字です(例:pt-Br)?負の数はどうですか?グループ区切り(カンマは英語)?通貨記号?TryParse()は、NumberStylesおよびIFormatProviderを使用して、必要に応じてこれらすべてを管理できます。
ルーカス

そうそう、私はAllバージョンの方が好きだ。私は実際にはその拡張メソッドを使用したことがありません。s.ToCharArray()。All(..)である必要があります。2つ目のポイントについては、そうですね。int.Parse...を使用したくない場合に前書きを付けたのはこのためです(オーバーヘッドが多いと想定しています...)
BFree

11
1.3.3.8.5は実際には数値ではありませんが、1.23E5はそうです。
クレメント

4
ロジックに欠陥があります。-1
ラッセルヤン

1
@Lucas TryParseがより多くを処理することに同意しますが、それが不要な場合もあります。クレジットカードの番号ボックス(数字のみ可能)を検証するだけです。このソリューションは、解析を試みるよりもほぼ間違いなく高速です。
ミリースミス

14

PHPのis_numericのように、より広い範囲の数値を取得したい場合は、以下を使用できます。

// From PHP documentation for is_numeric
// (http://php.net/manual/en/function.is-numeric.php)

// Finds whether the given variable is numeric.

// Numeric strings consist of optional sign, any number of digits, optional decimal part and optional
// exponential part. Thus +0123.45e6 is a valid numeric value.

// Hexadecimal (e.g. 0xf4c3b00c), Binary (e.g. 0b10100111001), Octal (e.g. 0777) notation is allowed too but
// only without sign, decimal and exponential part.
static readonly Regex _isNumericRegex =
    new Regex(  "^(" +
                /*Hex*/ @"0x[0-9a-f]+"  + "|" +
                /*Bin*/ @"0b[01]+"      + "|" + 
                /*Oct*/ @"0[0-7]*"      + "|" +
                /*Dec*/ @"((?!0)|[-+]|(?=0+\.))(\d*\.)?\d+(e\d+)?" + 
                ")$" );
static bool IsNumeric( string value )
{
    return _isNumericRegex.IsMatch( value );
}

単体テスト:

static void IsNumericTest()
{
    string[] l_unitTests = new string[] { 
        "123",      /* TRUE */
        "abc",      /* FALSE */
        "12.3",     /* TRUE */
        "+12.3",    /* TRUE */
        "-12.3",    /* TRUE */
        "1.23e2",   /* TRUE */
        "-1e23",    /* TRUE */
        "1.2ef",    /* FALSE */
        "0x0",      /* TRUE */
        "0xfff",    /* TRUE */
        "0xf1f",    /* TRUE */
        "0xf1g",    /* FALSE */
        "0123",     /* TRUE */
        "0999",     /* FALSE (not octal) */
        "+0999",    /* TRUE (forced decimal) */
        "0b0101",   /* TRUE */
        "0b0102"    /* FALSE */
    };

    foreach ( string l_unitTest in l_unitTests )
        Console.WriteLine( l_unitTest + " => " + IsNumeric( l_unitTest ).ToString() );

    Console.ReadKey( true );
}

値が数値であるからといって、数値型に変換できるとは限らないことに注意してください。たとえば、"999999999999999999999999999999.9999999999"は完全に有効な数値ですが、.NET数値タイプ(標準ライブラリで定義されているものではありません)には適合しません。


ここでは賢いアレックになろうとはしていませんが、これは文字列「0」では失敗するようです。私の正規表現は存在しません。そのための簡単な調整はありますか?有効な数値として、「0」、場合によっては「0.0」、さらには「-0.0」を取得します。
Steve Hibbert 14年

@SteveHibbert-「0」は数字ではないことは誰もが知っています!冗談はさておき... 0にマッチする正規表現を調整
JDBはまだモニカ覚え

うーん、それは私ですか、それとも「0」はまだ数値として認識されていませんか?
Steve Hibbert 14年

1
怠惰で、正規表現を知らないので、上のコードをカットアンドペーストしました。これには、「0.0」タイプの変更が含まれているようです。文字列「0」が.IsNumeric()を実行し、falseを返すことを確認するテストを実行しました。Octalテストは、最初の文字がゼロ(および2番目の文字が0〜7)である2つの数値文字を持つものに対してはtrueを返しますが、それだけで大きな太い孤独なゼロに対してはfalseを返します。上記のコードで「0」をテストすると、falseになりますか?申し訳ありません。正規表現をもっと知っていれば、より良いフィードバックを提供できます。読む必要があります。
スティーブヒバート14年

1
!Doh!上記のコメントをもう一度読んでください。追加のアスタリスクを見逃していたため、小数点のみを更新しました。これで、あなたは正しいです、 "0" IsNumeric。更新にご不便をおかけして申し訳ありません。更新に感謝します。他のユーザーにも役立つことを願っています。とても感謝しております。
スティーブヒバート14年

14

私はこれが古いスレッドであることを知っていますが、答えはどれも実際には私に役立ちませんでした-非効率的であるか、カプセル化されていないため、簡単に再利用できません。また、文字列が空またはnullの場合にfalseを返すようにしたかったのです。この場合、TryParseはtrueを返します(空の文字列は、数値として解析するときにエラーを引き起こしません)。だから、これが私の文字列拡張メソッドです:

public static class Extensions
{
    /// <summary>
    /// Returns true if string is numeric and not empty or null or whitespace.
    /// Determines if string is numeric by parsing as Double
    /// </summary>
    /// <param name="str"></param>
    /// <param name="style">Optional style - defaults to NumberStyles.Number (leading and trailing whitespace, leading and trailing sign, decimal point and thousands separator) </param>
    /// <param name="culture">Optional CultureInfo - defaults to InvariantCulture</param>
    /// <returns></returns>
    public static bool IsNumeric(this string str, NumberStyles style = NumberStyles.Number,
        CultureInfo culture = null)
    {
        double num;
        if (culture == null) culture = CultureInfo.InvariantCulture;
        return Double.TryParse(str, style, culture, out num) && !String.IsNullOrWhiteSpace(str);
    }
}

使い方は簡単:

var mystring = "1234.56789";
var test = mystring.IsNumeric();

または、他のタイプの数値をテストする場合は、「スタイル」を指定できます。したがって、指数で数値を変換するには、次のように使用できます。

var mystring = "5.2453232E6";
var test = mystring.IsNumeric(style: NumberStyles.AllowExponent);

または、潜在的な16進数文字列をテストするには、次を使用できます。

var mystring = "0xF67AB2";
var test = mystring.IsNumeric(style: NumberStyles.HexNumber)

オプションの「culture」パラメーターは、ほとんど同じ方法で使用できます。

doubleに含めるには大きすぎる文字列を変換できないことによって制限されますが、これは制限された要件であり、これより大きい数値を扱う場合は、おそらく追加の特殊な数値処理が必要になると思いますとにかく機能します。


2
Double.TryParseがNumberStyles.HexNumberをサポートしないことを除いて、うまく機能します。MSDN Double.TryParseを参照してください。IsNullOrWhiteSpaceを確認する前にTryParseを実行する理由は何ですか?IsNullOrWhiteSpaceがそうでない場合、TryParseはfalseを返しますか?
Harald Coppoolse 2015年

10

TryParseを使用して、文字列を整数に解析できるかどうかを判断できます。

int i;
bool bNum = int.TryParse(str, out i);

ブール値は、それが機能したかどうかを教えてくれます。


9

文字列が数値であるかどうかを確認したい場合(それが文字列であると仮定しているのは、それが数値である場合、それが1であることがわかっているからです)。

  • 正規表現なしで
  • Microsoftのコードを可能な限り使用する

あなたも行うことができます:

public static bool IsNumber(this string aNumber)
{
     BigInteger temp_big_int;
     var is_number = BigInteger.TryParse(aNumber, out temp_big_int);
     return is_number;
}

これは通常の厄介な問題を処理します:

  • 最初にマイナス(-)またはプラス(+)
  • 小数点を含むBigIntegerは、小数点のある数値を解析しません。(だから:BigInteger.Parse("3.3")例外をスローTryParseし、同じためにfalseを返します)
  • 面白い非数字はありません
  • 数が通常の使用よりも大きい場合をカバーします Double.TryParse

クラスへの参照を追加し、その上に配置するSystem.Numerics必要 using System.Numerics;があります(まあ、2番目はボーナスだと思います:)


8

この答えは他のすべての答えの間では失われると思いますが、とにかく、ここに行きます。

私はかどうかを確認したかったので、私はGoogleのを経由して、この質問に終わっstringnumeric私はちょうど使うことができるようにdouble.Parse("123")するのではなく、TryParse()方法。

どうして?解析が失敗したかどうかを知る前に、out変数を宣言して結果を確認する必要があるのは面倒だからTryParse()です。私が使用したいternary operatorかどうかを確認することstringnumerical、その後、ちょうど最初の三元表現でそれを解析または第二の三式のデフォルト値を提供します。

このような:

var doubleValue = IsNumeric(numberAsString) ? double.Parse(numberAsString) : 0;

次のものよりもずっときれいです:

var doubleValue = 0;
if (double.TryParse(numberAsString, out doubleValue)) {
    //whatever you want to do with doubleValue
}

私はextension methodsこれらの場合のためにいくつか作りました:


延長方法1

public static bool IsParseableAs<TInput>(this string value) {
    var type = typeof(TInput);

    var tryParseMethod = type.GetMethod("TryParse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
        new[] { typeof(string), type.MakeByRefType() }, null);
    if (tryParseMethod == null) return false;

    var arguments = new[] { value, Activator.CreateInstance(type) };
    return (bool) tryParseMethod.Invoke(null, arguments);
}

例:

"123".IsParseableAs<double>() ? double.Parse(sNumber) : 0;

IsParseableAs()文字列が「数値」であるかどうかをチェックするだけでなく、文字列を適切なタイプとして解析しようとするため、かなり安全です。またTryParse()、のようなメソッドを持つ非数値型にも使用できますDateTime

メソッドはリフレクションを使用し、TryParse()メソッドを2回呼び出すことになりますが、これはもちろん効率的ではありませんが、すべてを完全に最適化する必要はありません。利便性がより重要になる場合もあります。

このメソッドを使用すると、数値文字列のリストをdouble、例外をキャッチする必要なしに、デフォルト値を持つリストまたはその他のタイプのリストに簡単に解析できます。

var sNumbers = new[] {"10", "20", "30"};
var dValues = sNumbers.Select(s => s.IsParseableAs<double>() ? double.Parse(s) : 0);

延長方法2

public static TOutput ParseAs<TOutput>(this string value, TOutput defaultValue) {
    var type = typeof(TOutput);

    var tryParseMethod = type.GetMethod("TryParse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
        new[] { typeof(string), type.MakeByRefType() }, null);
    if (tryParseMethod == null) return defaultValue;

    var arguments = new object[] { value, null };
    return ((bool) tryParseMethod.Invoke(null, arguments)) ? (TOutput) arguments[1] : defaultValue;
}

この拡張メソッドを使用して、解析することができますstringどのようにtype持っているTryParse()方法を、それはまた、あなたが変換が失敗した場合に返すデフォルト値を指定することができます。

これは、変換を1回しか行わないため、上記の拡張メソッドで三項演算子を使用するよりも優れています。それはまだ反射を使用しています...

例:

"123".ParseAs<int>(10);
"abc".ParseAs<int>(25);
"123,78".ParseAs<double>(10);
"abc".ParseAs<double>(107.4);
"2014-10-28".ParseAs<DateTime>(DateTime.MinValue);
"monday".ParseAs<DateTime>(DateTime.MinValue);

出力:

123
25
123,78
107,4
28.10.2014 00:00:00
01.01.0001 00:00:00

4
私は今まで見た中で最も非効率なアプローチの1つを発明したと思います。文字列を2回解析するだけでなく(解析可能な場合)、リフレクション関数を複数回呼び出してそれを実行します。そして最終的には、拡張メソッドを使用してキーストロークを保存することすらありません。
JDBは2014

最後から2番目の段落で私が書いたことを繰り返していただきありがとうございます。また、私の最後の例を考慮すると、この拡張メソッドを使用してキーストロークを確実に保存できます。この回答は、あらゆる問題に対するある種の魔法の解決策であると主張するものではなく、単なるコード例です。使用するか、使用しないでください。正しく使えば便利だと思います。また、拡張方法とリフレクションの両方の例も含まれています。おそらく誰かがそれから学ぶことができます。
Hein AndreGrønnestad14年

5
試しましたvar x = double.TryParse("2.2", new double()) ? double.Parse("2.2") : 0.0;か?
JDBは2014

2
はい、動作しません。Argument 2 must be passed with the 'out' keywordあなたが指定outするだけでなく、newあなたが得るならA ref or out argument must be an assignable variable
Hein AndreGrønnestad15年

1
パフォーマンス TryParseは、ここで公開されているすべてのものより優れています。結果:TryParse 8 Regex 20 PHP IsNumeric 30リフレクションTryParse 31テストコードdotnetfiddle.net/x8GjAF
プランプ

7

文字列が数値であるかどうかを知りたい場合は、いつでも解析できます。

var numberString = "123";
int number;

int.TryParse(numberString , out number);

がをTryParse返すことboolに注意してください。これは、解析が成功したかどうかを確認するために使用できます。



4

Kunal Noel Answerの更新

stringTest.All(char.IsDigit);
// This returns true if all characters of the string are digits.

ただし、この場合、空の文字列がそのテストに合格するため、次のことができます。

if (!string.IsNullOrEmpty(stringTest) && stringTest.All(char.IsDigit)){
   // Do your logic here
}

4

と呼ばれる.net組み込み関数を使用した最高の柔軟なソリューションchar.IsDigit。無制限の長い数字で動作します。各文字が数値の場合にのみtrueを返します。私はそれを何回も問題なく使用し、私が見つけたはるかに簡単にクリーンな解決策を使用しました。メソッドの例を作成しました。すぐに使用できます。さらに、nullおよび空の入力の検証を追加しました。したがって、この方法は完全に防弾です

public static bool IsNumeric(string strNumber)
    {
        if (string.IsNullOrEmpty(strNumber))
        {
            return false;
        }
        else
        {
            int numberOfChar = strNumber.Count();
            if (numberOfChar > 0)
            {
                bool r = strNumber.All(char.IsDigit);
                return r;
            }
            else
            {
                return false;
            }
        }
    }


2

これらの拡張メソッドを使用して、文字列が数値であるかどうかと、文字列に0〜9桁しか含まれていないかどうかを明確に区別します。

public static class ExtensionMethods
{
    /// <summary>
    /// Returns true if string could represent a valid number, including decimals and local culture symbols
    /// </summary>
    public static bool IsNumeric(this string s)
    {
        decimal d;
        return decimal.TryParse(s, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.CurrentCulture, out d);
    }

    /// <summary>
    /// Returns true only if string is wholy comprised of numerical digits
    /// </summary>
    public static bool IsNumbersOnly(this string s)
    {
        if (s == null || s == string.Empty)
            return false;

        foreach (char c in s)
        {
            if (c < '0' || c > '9') // Avoid using .IsDigit or .IsNumeric as they will return true for other characters
                return false;
        }

        return true;
    }
}

2
public static bool IsNumeric(this string input)
{
    int n;
    if (!string.IsNullOrEmpty(input)) //.Replace('.',null).Replace(',',null)
    {
        foreach (var i in input)
        {
            if (!int.TryParse(i.ToString(), out n))
            {
                return false;
            }

        }
        return true;
    }
    return false;
}

1

お役に立てれば

string myString = "abc";
double num;
bool isNumber = double.TryParse(myString , out num);

if isNumber 
{
//string is number
}
else
{
//string is not a number
}

0

プロジェクトでVisual Basicへの参照を取得し、以下に示すようなInformation.IsNumericメソッドを使用して、intのみをキャッチする上記の答えとは異なり、floatとintegerをキャプチャできます。

    // Using Microsoft.VisualBasic;

    var txt = "ABCDEFG";

    if (Information.IsNumeric(txt))
        Console.WriteLine ("Numeric");

IsNumeric("12.3"); // true
IsNumeric("1"); // true
IsNumeric("abc"); // false

このアプローチの潜在的な問題IsNumericは、文字列の文字分析を行うことです。したがって、標準の数値型を使用してこの数値を表す方法はありませんが、のような数値は9999999999999999999999999999999999999999999999999999999999.99999999999として登録されTrueます。
JDBは2014

0

以下のregesを試してください

new Regex(@"^\d{4}").IsMatch("6")    // false
new Regex(@"^\d{4}").IsMatch("68ab") // false
new Regex(@"^\d{4}").IsMatch("1111abcdefg") ```

0

すべての回答は役に立ちます。しかし、数値が12桁以上(私の場合)であるソリューションを検索しているときに、デバッグ中に、次のソリューションが役立つことがわかりました。

double tempInt = 0;
bool result = double.TryParse("Your_12_Digit_Or_more_StringValue", out tempInt);

結果変数は、trueまたはfalseを返します。



-7
//To my knowledge I did this in a simple way
static void Main(string[] args)
{
    string a, b;
    int f1, f2, x, y;
    Console.WriteLine("Enter two inputs");
    a = Convert.ToString(Console.ReadLine());
    b = Console.ReadLine();
    f1 = find(a);
    f2 = find(b);

    if (f1 == 0 && f2 == 0)
    {
        x = Convert.ToInt32(a);
        y = Convert.ToInt32(b);
        Console.WriteLine("Two inputs r number \n so that addition of these text box is= " + (x + y).ToString());
    }
    else
        Console.WriteLine("One or two inputs r string \n so that concatenation of these text box is = " + (a + b));
    Console.ReadKey();
}

static int find(string s)
{
    string s1 = "";
    int f;
    for (int i = 0; i < s.Length; i++)
       for (int j = 0; j <= 9; j++)
       {
           string c = j.ToString();
           if (c[0] == s[i])
           {
               s1 += c[0];
           }
       }

    if (s == s1)
        f = 0;
    else
        f = 1;

    return f;
}

1
4つの反対投票ですが、誰も理由を述べていません。これは、TryParse / Parseの方が適切なオプションであるためだと思いますが、ここに来るすべての人がそれを知っているわけではありません。
njplumridge

2
あなたはそれを非常に複雑にして、Cプログラマーでも「
まあ

1.コンソールから2つの番号を読み取って追加する理由はありません。文字列がどこから来るかはとにかく関係ないので、コンソールから何かを読む理由はまったくありません。
アルゴマン2018

2. fの変数は不要です。0または1を直接返すことができます。単一の戻り値が必要な場合は、3項演算子を使用できます。intは、findの戻り値の型も正しくありません。ブール値である必要があり、s == s1を返すことができます
。s

3. sの桁をs1にコピーしてから、sとs1を比較します。これは必要以上に遅いです。また、c [0] == s [i]が発生した場合でも、なぜ内部ループを継続するのですか?s [i]も他の数字と等しいと思いますか?
アルゴマン2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.