【发布时间】:2011-09-21 21:46:50
【问题描述】:
我认为这将非常容易,但它导致需要进行比我想要的更多的检查。
到目前为止我有这个代码:
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 声明为 long,以防止出现负面结果,然后进行比较。
这会安全吗(我仍然担心在做乘法时结果会达到极限),你能想到更好的方法吗?
非常感谢, 可汗。
【问题讨论】:
-
为什么不使用 Enum 的 funcType 呢?
-
在我的实现中,funcTypes 是使用正则表达式从字符串中提取出来的。