C# 十进制值检查是否为零
我正在尝试编写一个除法方法,它接受两个参数C# 十进制值检查是否为零,c#,math,puzzle,C#,Math,Puzzle,我正在尝试编写一个除法方法,它接受两个参数 public static decimal Divide(decimal divisor, decimal dividend) { return dividend / divisor; } 现在,如果除数是0,我们得到不能被零除的误差,这是可以的 我想做的是检查除数是否为0,如果是,则将其转换为1。在我的方法中没有很多if语句,有没有办法做到这一点?我认为很多if()会造成混乱。我知道数学上不应该这样做,但我有其他的功能 例如: if(div
public static decimal Divide(decimal divisor, decimal dividend)
{
return dividend / divisor;
}
现在,如果除数是0,我们得到不能被零除的误差,这是可以的
我想做的是检查除数是否为0,如果是,则将其转换为1。在我的方法中没有很多if语句,有没有办法做到这一点?我认为很多if()会造成混乱。我知道数学上不应该这样做,但我有其他的功能
例如:
if(divisor == 0)
{
divisor = 1;
}
return dividend / divisor;
如果没有if()语句,它可以完成吗?这与if语句几乎相同,但更简洁
return dividend / divisor == 0 ? 1 : divisor;
您可以这样做一个条件if语句。这与VB.net中的IIF相同
return dividend / ((divisor == 0) ? 1 : divisor);
确保用()包装下半部分,否则将出现除法错误。使用
?:
运算符
return (divisor == 0) ? dividend : dividend / divisor
如果确实需要,您可以创建自己的类型并重载/运算符以获得所需的行为。实现隐式转换运算符以避免强制转换或类型转换
然而,我认为这不是一个好主意,因为它会增加一些运行时开销;唯一的好处是你得到了一些看起来(可以说)更干净的代码。你可以将它与
decimal.Zero
进行比较,比如somDecimalVar==decimal.Zero
+1来指出除以1是不必要的,只返回divident。这也很好,但为了进一步扩展,我喜欢另一个。我给你+1的帮助。你不需要两组括号,是吗?回报股息/(除数==0?1:除数);如果要做这个诀窍,我还有一个附加集,你也可以这样做:返回红利/(除数==0?1:除数);但是您确实需要()包装结果的值,否则您仍然会得到除以零的结果error@Brian-不,你不需要这两套,你是对的。另一方面,我有时发现杰森的方法更可读。如果有疑问,添加括号。我猜这是你的问题域,但是考虑到如果除数使得从0.000001到0.0i的代码比条件if语句变小,你的代码将返回一个非常不同的结果。更容易阅读!!这就是我想要的这比一个If语句更简洁