文字列をIntに変換するにはどうすればよいですか?


638

を持っているので、TextBoxD1.Textそれをに変換intしてデータベースに保存したいと考えています。

これどうやってするの?

回答:


1038

これを試して:

int x = Int32.Parse(TextBoxD1.Text);

またはより良い:

int x = 0;

Int32.TryParse(TextBoxD1.Text, out x);

また、をInt32.TryParse返すので、boolその戻り値を使用して、解析の結果に関する決定を行うことができます。

int x = 0;

if (Int32.TryParse(TextBoxD1.Text, out x))
{
    // you know that the parsing attempt
    // was successful
}

あなたが興味があれば、との違いParseとはTryParse最高のように要約されます。

TryParseメソッドはParseメソッドに似ていますが、変換が失敗してもTryParseメソッドは例外をスローしません。これにより、sが無効で正常に解析できない場合に、例外処理を使用してFormatExceptionをテストする必要がなくなります。- MSDN


3
整数が64ビットである場合、または「aslkdlksadjsd」のように見える場合はどうなりますか?これはまだ安全ですか?
Jonny

6
@ジョニーInt64.Parse()。入力が非整数の場合、を使用して実行とスタックトレースを取得するInt64.Parseか、を使用してブール値Falseを取得するInt64.TryParse()ため、のようなifステートメントが必要になりますif (Int32.TryParse(TextBoxD1.Text, out x)) {}

1
また、成功条件内でのみ使用される場合は、TryParseで変数を初期化することもできます。例:Int32.TryParse(TextBoxD1.Text、out int x))
simplysiby

5
多分これは他の人には信じられないほど明白ですが、初心者の場合、キャストが成功した場合、 'out x'はxの値をstring-cast-as-integerに設定します。つまり、この場合、文字列に整数以外の文字がある場合はx = 0、それ以外の場合はx = string-as-integerの値。つまり、これは、キャストが成功したかどうかを通知する短い式であり、キャストされた整数を変数に同時に格納することです。当然のことながら、「else {//解析された文字列は整数ではないため、この状況を処理するためのコード}」を使用して上記の行を続けることがよくあります
Will Croxford

@Robertoは問題ありませんが、ユーザーが(誤ってまたは意図的に)テキストボックス内にそのような「aslkdlksadjsd」値を入力する可能性があります!プログラムはクラッシュするのでしょうか?
S.Serpooshan 2018

55
Convert.ToInt32( TextBoxD1.Text );

テキストボックスの内容が有効であると確信できる場合は、これを使用してくださいint。より安全なオプションは

int val = 0;
Int32.TryParse( TextBoxD1.Text, out val );

これにより、使用できるデフォルト値が提供されます。Int32.TryParseは、解析できたかどうかを示すブール値も返すため、ifステートメントの条件としても使用できます。

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}

-1 RE。「これにより、使用できるいくつかのデフォルト値が提供されます。」valを意味する場合は、「このパラメーターは初期化されずに渡されます。結果として最初に提供された値は上書きされます。」[参照 docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2

6
10年前、私はお詫び申し上げます。
Babak Naffas

37
int.TryParse()

テキストが数値でない場合はスローされません。


これは他の2つよりも優れています。ユーザー入力の形式が間違っている可能性があります。これは、他が必要とするような例外処理を使用するよりも効率的です。
UncleO 2009年

丁度。変換が失敗した場合はfalseを返します。
n8wrl 2009年

21
int myInt = int.Parse(TextBoxD1.Text)

別の方法は次のとおりです。

bool isConvertible = false;
int myInt = 0;

isConvertible = int.TryParse(TextBoxD1.Text, out myInt);

2つの違いは、テキストボックスの値を変換できない場合、最初の1つは例外をスローしますが、2つ目はfalseを返すだけです。


上記のブール変数は、comaprisonの変換された値を使用している場合に非常に便利です。 code int NumericJL; bool isNum = int.TryParse(nomeeJobBand、out NumericJL); if(isNum)// retured JLはintにパッシングでき、その後比較のために進みます{if(!(NumericJL> = 6)){// Nominate} // else {}}
baymax

16

文字列を解析する必要があります。また、文字列が整数の形式であることを確認する必要もあります。

最も簡単な方法はこれです:

int parsedInt = 0;
if (int.TryParse(TextBoxD1.Text, out parsedInt))
{
   // Code for if the string was valid
}
else
{
   // Code for if the string was invalid
}

14

charでConvert.ToInt32()を使用するときは注意してください!文字のUTF-16コード
を返します!

[i]インデックス演算子を使用して特定の位置でのみ文字列にアクセスするcharと、string!ではなくa が返されます。

String input = "123678";
                    ^
                    |
int indexOfSeven =  4;

int x = Convert.ToInt32(input[indexOfSeven]);             // Returns 55

int x = Convert.ToInt32(input[indexOfSeven].toString());  // Returns 7

11
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

TryParseステートメントは、解析が成功したかどうかを表すブール値を返します。成功した場合、解析された値は2番目のパラメーターに格納されます。

詳細については、Int32.TryParseメソッド(String、Int32)を参照してください。



10

ここではint.Parse、を説明する多くの解決策がすでにありますが、すべての回答に重要な欠けているものがあります。通常、数値の文字列表現はカルチャによって異なります。通貨記号、グループ(または千単位)区切り記号、小数点区切り記号などの数値文字列の要素はすべて、文化によって異なります。

文字列を整数に解析する堅牢な方法を作成する場合は、カルチャ情報を考慮することが重要です。そうしない場合、現在のカルチャー設定が使用されます。これは、ユーザーにかなり厄介な驚きを与える可能性があります。ファイル形式を解析している場合はさらに悪いことです。英語の解析だけが必要な場合は、使用するカルチャ設定を指定して、明示的に明示することをお勧めします。

var culture = CultureInfo.GetCulture("en-US");
int result = 0;
if (int.TryParse(myString, NumberStyles.Integer, culture, out result))
{
    // use result...
}

詳細については、CultureInfo、特にMSDNのNumberFormatInfoを参照してください。


8

独自の拡張メソッドを書くことができます

public static class IntegerExtensions
{
    public static int ParseInt(this string value, int defaultValue = 0)
    {
        int parsedValue;
        if (int.TryParse(value, out parsedValue))
        {
            return parsedValue;
        }

        return defaultValue;
    }

    public static int? ParseNullableInt(this string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            return null;
        }

        return value.ParseInt();
    }
}

そして、コードのどこにでも呼び出すだけです

int myNumber = someString.ParseInt(); // Returns value or 0
int age = someString.ParseInt(18); // With default value 18
int? userId = someString.ParseNullableInt(); // Returns value or null

この具体的なケースでは

int yourValue = TextBoxD1.Text.ParseInt();

これらの拡張メソッドは?ではなくaに作用するため、のStringExtensions代わりにクラスを呼び出すべきIntegerExtensionsではstringありませんint
シバ

7

TryParseのドキュメントで説明されているように、TryParse()は有効な数値が見つかったことを示すブール値を返します。

bool success = Int32.TryParse(TextBoxD1.Text, out val);

if (success)
{
    // Put val in database
}
else
{
    // Handle the case that the string doesn't contain a valid number
}



5
//May be quite some time ago but I just want throw in some line for any one who may still need it

int intValue;
string strValue = "2021";

try
{
    intValue = Convert.ToInt32(strValue);
}
catch
{
    //Default Value if conversion fails OR return specified error
    // Example 
    intValue = 2000;
}

この場合のデフォルト設定はお勧めできません。デフォルトが
絶対

5

あなたはC#で文字列をintに変換することができます:

変換クラスの機能、すなわちConvert.ToInt16()Convert.ToInt32()Convert.ToInt64()または使用してParseおよびTryParse機能。ここに例を示します


これは以前の回答とどう違うのですか?
Peter Mortensen

4

拡張メソッドを使用することもできるので、より読みやすくなります(ただし、通常のParse関数はすべてのユーザーに既に使用されています)。

public static class StringExtensions
{
    /// <summary>
    /// Converts a string to int.
    /// </summary>
    /// <param name="value">The string to convert.</param>
    /// <returns>The converted integer.</returns>
    public static int ParseToInt32(this string value)
    {
        return int.Parse(value);
    }

    /// <summary>
    /// Checks whether the value is integer.
    /// </summary>
    /// <param name="value">The string to check.</param>
    /// <param name="result">The out int parameter.</param>
    /// <returns>true if the value is an integer; otherwise, false.</returns>
    public static bool TryParseToInt32(this string value, out int result)
    {
        return int.TryParse(value, out result);
    }
}

そして、あなたはそれをそのように呼ぶことができます:

  1. 文字列が「50」などの整数であることが確かな場合。

    int num = TextBoxD1.Text.ParseToInt32();
  2. 確実ではなく、クラッシュを防ぎたい場合。

    int num;
    if (TextBoxD1.Text.TryParseToInt32(out num))
    {
        //The parse was successful, the num has the parsed value.
    }

より動的にするために、解析してdoubleやfloatなどにもできるようにするには、一般的な拡張を作成します。


4

変換stringにはint:のために行うことができintInt32Int64および他のデータ型は、.NETの整数データ型を反映します

以下の例は、この変換を示しています。

これは、(情報用に)int値に初期化されたデータアダプター要素を表示します。同じように直接行うことができます

int xxiiqVal = Int32.Parse(strNabcd);

string strNii = "";
UsrDataAdapter.SelectCommand.Parameters["@Nii"].Value = Int32.Parse(strNii );

このデモを表示するリンク



4

以下のように、TryParseや組み込みの関数なしで実行できます。

static int convertToInt(string a)
{
    int x = 0;
    for (int i = 0; i < a.Length; i++)
    {
        int temp = a[i] - '0';
        if (temp != 0)
        {
            x += temp * (int)Math.Pow(10, (a.Length - (i+1)));
        }
    }
    return x;
}

convertToInt( "1234")は10000を返します...誰か他の人の答えをコピーする場合は、少なくとも全体をコピーしてください
SerenityNow

自分と自分を比較しないでください。代わりに、更新されたソリューションを追加してください。笑
lazydeveloper

@SerenityNow今すぐ確認できますタイプミスでした。
lazydeveloper 2018

1
あなたのIDを参照すると、怠惰な開発者はそのようなメソッドを作成しません!; D良い
S.Serpooshan


2

parseメソッドを使用して、文字列を整数値に変換できます。

例えば:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);

これは以前の回答とどう違うのですか?
Peter Mortensen

2

私がいつもこれを行う方法は次のとおりです:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace example_string_to_int
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            // This turns the text in text box 1 into a string
            int b;
            if (!int.TryParse(a, out b))
            {
                MessageBox.Show("This is not a number");
            }
            else
            {
                textBox2.Text = a+" is a number" ;
            }
            // Then this 'if' statement says if the string is not a number, display an error, else now you will have an integer.
        }
    }
}

これが私のやり方です。


0

長い道のりを探しているなら、ただ一つのメソッドを作成してください:

static int convertToInt(string a)
    {
        int x = 0;

        Char[] charArray = a.ToCharArray();
        int j = charArray.Length;

        for (int i = 0; i < charArray.Length; i++)
        {
            j--;
            int s = (int)Math.Pow(10, j);

            x += ((int)Char.GetNumericValue(charArray[i]) * s);
        }
        return x;
    }

0

方法1

int  TheAnswer1 = 0;
bool Success = Int32.TryParse("42", out TheAnswer1);
if (!Success) {
    Console.WriteLine("String not Convertable to an Integer");
}

方法2

int TheAnswer2 = 0;
try {
    TheAnswer2 = Int32.Parse("42");
}
catch {
    Console.WriteLine("String not Convertable to an Integer");
}

方法3

int TheAnswer3 = 0;
try {
    TheAnswer3 = Int32.Parse("42");
}
catch (FormatException) {
    Console.WriteLine("String not in the correct format for an Integer");
}
catch (ArgumentNullException) {
    Console.WriteLine("String is null");
}
catch (OverflowException) {
    Console.WriteLine("String represents a number less than"
                      + "MinValue or greater than MaxValue");
}


0

これは私にとってはうまくいきます:

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}

説明が正しいでしょう。
Peter Mortensen

0

以下を試すことができます。それが動作します:

int x = Convert.ToInt32(TextBoxD1.Text);

変数TextBoxD1.Textの文字列値はInt32に変換され、xに格納されます。


0

C#v.7では、追加の変数宣言なしでインライン出力パラメーターを使用できます。

int.TryParse(TextBoxD1.Text, out int x);

outC#では現在、パラメーターは推奨されていませんか?
Peter Mortensen

-3

これはあなたを助けるかもしれません; D

{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        float Stukprijs;
        float Aantal;
        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("In de eersre textbox staat een geldbedrag." + Environment.NewLine + "In de tweede textbox staat een aantal." + Environment.NewLine + "Bereken wat er moetworden betaald." + Environment.NewLine + "Je krijgt 15% korting over het bedrag BOVEN de 100." + Environment.NewLine + "Als de korting meer dan 10 euri is," + Environment.NewLine + "wordt de korting textbox lichtgroen");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            errorProvider2.Clear();
            if (float.TryParse(textBox1.Text, out Stukprijs))
            {
                if (float.TryParse(textBox2.Text, out Aantal))
                {
                    float Totaal = Stukprijs * Aantal;
                    string Output = Totaal.ToString();
                    textBox3.Text = Output;
                    if (Totaal >= 100)
                    {
                        float korting = Totaal - 100;
                        float korting2 = korting / 100 * 15;
                        string Output2 = korting2.ToString();
                        textBox4.Text = Output2;
                        if (korting2 >= 10)
                        {
                            textBox4.BackColor = Color.LightGreen;
                        }
                        else
                        {
                            textBox4.BackColor = SystemColors.Control;
                        }
                    }
                    else
                    {
                        textBox4.Text = "0";
                        textBox4.BackColor = SystemColors.Control;
                    }
                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }

            }
            else
            {
                errorProvider1.SetError(textBox1, "Bedrag plz!");
                if (float.TryParse(textBox2.Text, out Aantal))
                {

                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }
            }

        }

        private void BTNwissel_Click(object sender, EventArgs e)
        {
            //LL, LU, LR, LD.
            Color c = LL.BackColor;
            LL.BackColor = LU.BackColor;
            LU.BackColor = LR.BackColor;
            LR.BackColor = LD.BackColor;
            LD.BackColor = c;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show("zorg dat de kleuren linksom wisselen als je op de knop drukt.");
        }
    }
}

説明が正しいでしょう。
Peter Mortensen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.