如何检查计算是否在更高和更低范围内

时间:2011-06-24 09:47:13

标签: c# casting int

我认为这将非常容易,但它导致需要比我想要的更多支票。

到目前为止我有这个代码:

        if (funcType == "Mul")
            return (val1 * val2) <= int.MaxValue && (val1 * val2) >= int.MinValue;

        if (funcType == "Add")
            return (val1 + val2) <= int.MaxValue && (val1 + val2) >= int.MinValue;

        if (funcType == "Sub")
            return (val1 - val2) <= int.MaxValue && (val1 - val2) >= int.MinValue;

        if (funcType == "Div")
            return (val1 / val2) <= int.MaxValue && (val1 / val2) >= int.MinValue;

我需要检查计算结果是否在int值类型范围内的数字。

例如

int val1 = 1777777774;
int val2 = 477778777;

当加在一起时,结果是 -2039410745 (一个有效的int) 但这不是正确的答案(可以这么说),因此检查无法正常工作。

我想我可以声明val1和val2为长,以防止负面结果然后进行比较。

这是否安全(我仍然担心在进行乘法时结果达到极限),你能想到更好的方法吗?

非常感谢, 钢钣。

2 个答案:

答案 0 :(得分:4)

使用checked关键字并抓住OverflowException

答案 1 :(得分:1)

首先将其中一个参数转换为long,然后整个计算将使用64位整数。

只要您的原始参数仍然键入为int,就没有溢出的危险:long.MaxValue的幅度是int.MaxValue * int.MaxValue的两倍多,与long.MinValue类似{ {1}}。

int.MinValue * int.MaxValue