c# -是否有可能使除零返回一个数字,而不是抛出异常
本文关键字:数字 一个 抛出异常 有可能 是否 返回 | 更新日期: 2023-09-27 18:09:09
我有一个包含除法的表达式,其中一些分母有时为零。然而,在这些情况下,我希望除法的结果是1,而不是抛出异常。是否有任何直接的方法来做到这一点,或者我被迫做一些if语句并改变表达式的输入来获得预期的效果?
虽然我必须质疑这里的动机,但如果您需要这样做,请创建一个函数。
double SafeDiv(double num, double denom) {
if(denom == 0) {
return 1;
}
return num/denom;
}
您可以编写一个除法函数。下面是一个扩展示例思想:
public static float DivideBy(this float toBeDivided, float divideBy){
try
{
return toBeDivided / divideBy;
}
catch(DivideByZeroException)
{
return 1.0;
}
}
由于无法为内置类型重新定义除法操作符,因此需要在函数中实现除法操作。
像这样?
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所写的,并质疑这样做的动机。
No。如果我理解你的问题,你想改变除法操作的行为,让它返回1而不是抛出。这是不可能的
首先检查分母是否为零,如果不等于零则执行操作
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)
{
}
}
如果除数或除数都是double且除数为0(或0.0),结果是正无穷大或负无穷大。它将通过所有后续操作而不抛出,而是返回±Infinity或NaN,具体取决于其他操作数。稍后您可以检查最终值是否有意义。
如果由于某种原因必须在除以0时返回1,那么您有几个选项:
- 自定义泛型函数
- 带有重载操作符的自定义类型
- 除法前检查除数是否为0
据我所知,这不是通常做的事情,所以你可能会重新思考为什么要这样做…
也许你可以试试这个
double res = a / (b == 0 ? a : b);