2009-05-27 2 views
3

Я пытаюсь написать метод разделения, который принимает 2 параметра.Десятичное значение Проверьте, является ли Zero

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() заявления?

+1

Я предполагаю, что это ваш проблемный домен, но учтите, что ваш код будет возвращать совсем другой результат, если делитель делает очень незначительное изменение от 0,000001 до 0,0 –

+0

. Я предпочитаю ВАШ код, чем условные операторы if. Намного легче читать !! И это то, что я хочу –

ответ

15

Вы можете сделать условное заявление, например, следующим образом. Это то же самое, как IIF в VB.net

return dividend/((divisor == 0) ? 1 : divisor); 

Убедитесь, что вы обернуть свою вторую половинку с(), или вы получите сообщение об ошибке деления.

+0

Вам не нужны два набора круглых скобок? return divend/(divisor == 0? 1: divisor); должен сделать трюк –

+0

Нет, у меня был дополнительный набор, который вы можете сделать так: return divend/(divisor == 0? 1: divisor); – CodeLikeBeaker

+0

Но вам нужно() обернуть значение результата, другое мудрый вы все равно получите деление на нулевую ошибку – CodeLikeBeaker

2

Это почти то же самое, что и инструкция if, но она чище.

return dividend/divisor == 0 ? 1 : divisor; 
+0

Это не чище, чем инструкция If –

11

С помощью ?: оператора

return (divisor == 0) ? dividend : dividend/divisor 
+2

+1 для указания того, что деление на 1 не нужно и просто возвращает divident. –

+0

Это тоже хорошо, но мне нравится другой для дальнейшего расширения цели. Я даю +1 за вашу помощь. – 2009-05-27 15:11:41

0

Вы можете создать свой собственный тип и перегрузить оператор /, чтобы получить желаемое поведение, если вы действительно хотите. Внедрение операторов неявного преобразования, чтобы избежать преобразования или преобразования типов.

Я не думаю, что это была бы хорошая идея, поскольку это добавило бы некоторые издержки времени исполнения; с единственным преимуществом, которое вы получаете в виде кода, который (возможно) выглядит немного чище.

Смежные вопросы