-4

わかりました、人々は私に最後のアイテムをクリアしようとさせてくれます. オブジェクト a があり、その値が double、int、または string であるかどうかを確認したいと考えています。

例: - オブジェクト a = "12.3" または a = 12.3 の場合、int に変換しながら double に変換して throw できる必要があります。オブジェクト a = "12" または a = 12 または a = 12.0 の場合、int に変換し、double に変換しながらスローできるはずです。

object a="apple" の場合、double と int の両方に対してスローする必要があります。

今回は明確であることを願っています。しかし、Timwi のソリューションは実際に問題を解決してくれました。:-)

4

8 に答える 8

4

double があり、整数の場合は int に変換し、それ以外の場合はスローしたいと思います。これは、あなたの望むことですか?

public static int ToInt32(double val)
{
    if (val % 1 != 0)
        throw new FormatException("The value is not an integer.");
    return Convert.ToInt32(val);
}
于 2012-05-28T19:14:01.257 に答える
3

aあなたの例ではそれがタイプであると思われobject、実際のコードは次のようになります。

int myToInt(object a)
{
    return Convert.ToInt32(a);
}

aしかし、これが整数の場合にスローする必要があります。では、これはどうですか:

int myToInt(object a)
{
    if (a is double)
        throw new ArgumentException("a", "Must not be a double");
    return Convert.ToInt32(a);
}
于 2012-05-28T19:05:11.490 に答える
1

ここで OP が何を望んでいるかは完全に推測しているので、もう一度やり直します。値が切り捨てられた場合にのみスローするメソッドが必要であると仮定すると、次のようなことを試してください。

int MyToInt32(double value)
{
    if (value != Math.Floor(value))
        throw new ArgumentException("value", "The value must not have a fractional part");
    return (int) value;
}

しかし、これはおそらくかなり悪い考えです。

于 2012-05-28T19:11:55.410 に答える
1
var a = 12.34;
int c = Int32.Parse(a.ToString(), NumberStyles.Integer,
                    CultureInfo.InvariantCulture);

数値の文字列表現が整数でない場合、これは例外をスローします。そのドキュメントはhereです。

于 2012-05-28T18:58:40.893 に答える
0

使用はどうですか

if( x is int )
{
    // convert here
}
else
{
    throw new Exception("Not an int");
}
于 2012-05-28T19:21:45.330 に答える
0

数学を使ってみませんか?double に何らかの値を追加して、int よりも大きい (または小さい) ようにすることができます。
次に、変換 (エラーが返されます) と反対の数学関数を試みます。

エラーをスローする理由はまだわかりません...
変数がint-bordersの間にある場合、Double -> intは機能します

于 2012-05-28T19:11:54.443 に答える
0

最初のConvert.Int32(double)は、整数部分を取り、小数部分を除いて値を切り捨てません。実際、丸められた値を返します。

最も近い 32 ビットの符号付き整数に丸められます。値が 2 つの整数の中間にある場合、偶数が返されます。つまり、4.5 は 4 に変換され、5.5 は 6 に変換されます。

キャストは値を切り捨て、整数部分を取り、小数部分を破棄します。

あなたの質問について

double を int に変換しようとすると、フォーマット例外または何かをスローできるカスタム C# メソッドはありますか。??

Convert.ToInt32渡された値が有効な double 値でない場合、例外がスローされます。例えば

 var val = "12.54A";
 int iVal = Convert.ToInt32(val);

一方、 int iVal = (int) val; を使用してキャストしようとすると、コンパイルエラーが発生します。

于 2012-05-28T19:05:20.303 に答える
-1

キャストを使う

var a = 12.34
int integer = (int)a;
于 2012-05-28T18:54:29.320 に答える