0

私の質問はばかげているように見えるかもしれませんが、私はそれを打ちました。文字列値「155.300」があり、整数に変換したいと考えています。私は試みましたが、System.FormatExceptionを投げました....pls誰かが私を助けてくれます。

4

4 に答える 4

5

Doubleソースデータは文字列であるため、最初に変換してからキャストするintか、を使用する必要がありますが、キャストは数値の一部を占めるのに対し、最も近い整数に丸めることをConvert.ToInt32忘れないでください(切り捨て)Convert.ToInt32int

double d = Convert.ToDouble("155.00");    
int a = (int) d;
int b = Convert.ToInt32(d);

または1行で

int b =(int) Convert.ToDouble("155.000");

編集

小数点を千の区切り文字として使いたいので、ドイツの文化では次のことができると思います。

int b = ((int)Convert.ToDouble("154.500", new CultureInfo("de-DE")));

それはあなたに与えるでしょう154500

編集2

または、次のものと一緒に使用することint.Parseをお勧めしNumberStyles.AllowThousandsます。

 int b = int.Parse("154.500", NumberStyles.AllowThousands, new CultureInfo("de-DE"));
于 2012-09-04T10:30:54.763 に答える
5

最初にそれをdecimalまたはdouble(おそらく10進データdecimalあるので使用するのが最適です)として解析し、次に要件に応じてキャストするか、のようなものを使用します。Math.Round

基本的に、取得したデータを常に考慮する必要があります。「155.300」は整数の文字列表現ではないため、整数として解析しようとしないでください。それをそのまま解析し、それを整数に変換します。

あるいは、最初に文字列表現をハックすることもできますが、個人的には、多くの場合、より脆弱なアプローチであることがわかります。

編集:これが実際にはすでに整数であるが、千の区切り記号がある場合は、まったく使用する必要がないことに注意してください。適切なカルチャと数値スタイルを指定して、をdouble使用できます。int.Parse

int parsed = int.Parse(text, NumberStyles.Integer | NumberStyles.AllowThousands,
                       culture);
于 2012-09-04T10:31:35.060 に答える
0

これを試すことができます:

string str = "123.123";
str = str.Remove(str.IndexOf('.'), 1);
int result;
int.TryParse(str, out result);

編集:あなたのコメントに基づいて、1000倍に変更されました。または、次のことを試すことができます。

string str = "123.123";
double result;
double.TryParse(str, out result);

int final = (int)(result * 1000);
于 2012-09-04T11:00:07.643 に答える
0

これは実際の変換サンプルです。エッジ条件を特別に見てください。いくつかの丸め/キャスト手法を使用すると、出力が異なる場合があります

class Program
{
    public static int MyToInt(string str)
    {
        double result;
        bool success = Double.TryParse(str, out result);
        if (!success)
        {
            throw new ArgumentException(
                "Cannot parse a string into a double");
        }

        return Convert.ToInt32(result);     // 156
        //return (int)result;               // 155 <<
        //return (int)Math.Round(result);   // 156
    }

    static void Main(string[] args)
    {
        string s = "155.500";
        int value = MyToInt(s); 
    }
}
于 2012-09-04T10:43:56.323 に答える