好的人让我试着清除最后一个itme。我有一个对象a,我想检查它的值是否为double,int或string。
例如: - 如果对象a =“12.3”或a = 12.3,它应该能够转换为double并在转换为int时抛出。 如果对象a =“12”或a = 12或a = 12.0,它应该能够转换为int并在转换为double时抛出。
如果对象a =“apple”,它应该抛出double和int。
希望这次我很清楚。但Timwi的解决方案实际上解决了我的问题。 : - )
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
答案 2 :(得分:1)
var a = 12.34;
int c = Int32.Parse(a.ToString(), NumberStyles.Integer,
CultureInfo.InvariantCulture);
如果数字的字符串表示形式不是整数,则会抛出异常。它的文档是here。
答案 3 :(得分: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;
}
但这可能是一个相当糟糕的主意。
答案 4 :(得分:0)
第一个Convert.Int32(double)不截断取整数部分的值并排除小数部分。事实上,它返回舍入值。
值,四舍五入到最接近的32位有符号整数。如果价值是 在两个整数之间,返回偶数;那 是,4.5转换为4,5.5转换为6.
转换将截断该值并取整数部分并丢弃小数部分。
对于你的问题
如果传递给它的值不是有效的double值,是否有自定义c#方法,我可以通过该方法抛出格式 我尝试将double转换为int时出现异常。 ??
Convert.ToInt32
将抛出异常。例如
var val = "12.54A";
int iVal = Convert.ToInt32(val);
然而,如果你尝试使用int iVal =(int)val来强制转换它;会给你编译错误。
答案 5 :(得分:0)
你能尝试使用数学吗?
您可以尝试在double中添加一些值,以确保它比int更大(或更小)。
然后尝试转换(将返回错误)和相反的数学函数。
仍然不知道你为什么要抛出错误...
双 - >如果变量位于int-borders之间
答案 6 :(得分:0)
使用是什么
if( x is int )
{
// convert here
}
else
{
throw new Exception("Not an int");
}
答案 7 :(得分:-1)
使用演员
var a = 12.34
int integer = (int)a;