我有一个包含除法的表达式,其中一些分母有时为零。但是,在这些情况下,我希望该除法结果为 1,而不是引发异常。有什么直接的方法可以做到这一点,还是我被迫做一些 if 语句并更改表达式的输入以获得这种预期的效果?
问问题
3364 次
8 回答
7
虽然我必须质疑这里的动机,但如果你需要这样做,那就做一个函数。
double SafeDiv(double num, double denom) {
if(denom == 0) {
return 1;
}
return num/denom;
}
于 2011-09-21T14:04:37.960 回答
1
由于无法为内置类型重新定义除法运算符,因此您需要在函数中实现除法版本。
于 2011-09-21T14:06:00.347 回答
1
像这样的东西?
public T divide<T>(T dividend, T divisor) {
return ((divisor == 0) ? (1) : (dividend / divisor));
}
也许...
public T divide<T>(T dividend, T divisor) {
try {
return dividend / divisor;
}
catch (DivideByZeroException) {
return 1;
}
}
就个人而言,如果您知道在某些情况下除数可能为 0,我不会认为这种情况“异常”,因此使用第一种方法(如果您愿意,也可以非常方便地手动内联)。
也就是说,我同意Chris Marasti-Georg所写的内容,并质疑这样做的动机。
于 2011-09-21T14:06:34.163 回答
1
你可以写一个除法函数。这是一个扩展示例想法:
public static float DivideBy(this float toBeDivided, float divideBy){
try
{
return toBeDivided / divideBy;
}
catch(DivideByZeroException)
{
return 1.0;
}
}
于 2011-09-21T14:04:32.433 回答
0
首先检查分母,如果不等于零执行操作
public double ReturnValueFunction(int denominator, int numerator)
{
try
{
if(denominator!=0)
{
return numerator/ denominator;
/* or your code */
}
else
{
/*your code*/
return someDecimalnumber;
}
}
catch(Exception ex)
{
}
}
于 2011-09-21T14:11:35.860 回答
0
如果除数或除数中的任何一个为双倍且除数为 0(或 0.0),则结果为正无穷或负无穷。它将通过所有后续操作而不抛出,而是返回 ±Infinity 或 NaN,具体取决于其他操作数。稍后您可以检查最终值是否有意义。
如果由于某种原因需要在除以零时返回 1,那么您有几种选择:
- 自定义泛型函数
- 具有重载运算符的自定义类型
- 在除法之前检查除数是否为0
据我所知,这不是通常会做的事情,所以您可能会重新考虑为什么要这样做。
于 2011-09-21T14:18:07.840 回答
0
也许你可以试试这个
double res = a / (b == 0 ? a : b);
于 2011-09-21T17:41:56.873 回答
0
不。如果我理解您的问题,您想更改除法操作的行为并让它返回 1 而不是 throw。没有办法做到这一点。
于 2011-09-21T14:07:51.637 回答