2009-05-27 23 views
3

Ich versuche, eine Divisionsmethode zu schreiben, die 2 Parameter akzeptiert.Dezimalwert Überprüfen Sie, ob Null

public static decimal Divide(decimal divisor, decimal dividend) 
{ 
    return dividend/divisor; 
} 

Nun, wenn Divisor 0 ist, können wir nicht durch Null Fehler teilen, was in Ordnung ist.

Was ich tun möchte, ist zu überprüfen, ob der Divisor 0 ist und wenn es ist, konvertieren Sie es in 1. Gibt es eine Möglichkeit, dies zu tun, mit einer Menge von if-Anweisungen in meiner Methode? Ich denke, eine Menge von If() s macht Unordnung. Ich weiß mathematisch, dass dies nicht getan werden sollte, aber ich habe andere Funktionalität dafür.

Zum Beispiel:

if(divisor == 0) 
{ 
    divisor = 1; 
} 
return dividend/divisor; 

Kann es ohne die if() Aussage gemacht werden?

+1

Ich denke, das ist Ihre Problemdomäne, aber bedenken Sie, dass Ihr Code ein sehr anderes Ergebnis zurückgibt, wenn der Divisor die sehr geringfügige Änderung von 0,000001 zu 0,0 –

+0

Ich bevorzuge IHRE Code, als die bedingten if-Anweisungen. Viel einfacher zu lesen !! Und das ist, was ich will –

Antwort

15

Sie können eine bedingte if-Anweisung wie folgt machen. Dies ist die gleiche wie IIF in VB.net

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

Stellen Sie sicher, dass Ihre zweite Hälfte wickeln mit() oder Sie werden einen Divisionsfehler erhalten.

+0

Sie brauchen nicht zwei Klammern, oder? Rendite Dividende/(Divisor == 0? 1: Divisor); sollte den Trick machen –

+0

Nein, ich hatte einen zusätzlichen Satz, den Sie auch so machen können: Dividende zurückgeben/(Divisor == 0? 1: Divisor); – CodeLikeBeaker

+0

Aber Sie brauchen die() Umbruch der Wert des Ergebnisses, sonst erhalten Sie immer noch die Division durch Null Fehler – CodeLikeBeaker

2

Das ist so ziemlich wie eine if-Anweisung, aber es ist sauberer.

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

das ist nicht sauberer als eine If-Anweisung –

11

Durch die Verwendung des ?: Operator

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

+1, um darauf hinzuweisen, dass eine Division durch 1 unnötig ist, und geben Sie einfach den Divident zurück. –

+0

Das ist auch gut, aber ich mag andere für weitere Zwecke erweitern. Ich gebe +1 für deine Hilfe. –

0

Sie könnten Ihre eigene Art erstellen und den/Betreiber überlasten das gewünschte Verhalten zu erhalten, wenn Sie wirklich wollen. Implementieren Sie die impliziten Konvertierungsoperatoren, um das Umwandeln oder Konvertieren von Typen zu vermeiden.

Ich denke nicht, dass es eine gute Idee wäre, da es einige Laufzeit Overhead hinzufügen würde; mit dem einzigen Vorteil, dass Sie etwas Code bekommen, der (etwas) ein wenig sauberer aussieht.

Verwandte Themen