如何不将double转换为int C#?

时间:2012-05-28 18:52:33

标签: c#

好的人让我试着清除最后一个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的解决方案实际上解决了我的问题。 : - )

8 个答案:

答案 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.

转换将截断该值并取整数部分并丢弃小数部分。

对于你的问题

  

是否有自定义c#方法,我可以通过该方法抛出格式   我尝试将double转换为int时出现异常。 ??

如果传递给它的值不是有效的double值,

Convert.ToInt32将抛出异常。例如

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

然而,如果你尝试使用int iVal =(int)val来强制转换它;会给你编译错误。

答案 5 :(得分:0)

你能尝试使用数学吗? 您可以尝试在double中添加一些值,以确保它比int更大(或更小)。
然后尝试转换(将返回错误)和相反的数学函数。

仍然不知道你为什么要抛出错误...
双 - >如果变量位于int-borders之间

,则int将起作用

答案 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;