2009-09-01 14 views
7

Wie erhalten Sie den absoluten Wert einer Zahl in vb.net?Absoluter Wert in vb.net

Ist eine Funktion eingebaut? Ich weiß, dass ich eine Funktion einfach selbst programmieren kann, aber ich möchte wissen, ob es dort bereits einen gibt. Es scheint so einfach, ich könnte es wahrscheinlich in drei Zeilen machen, also würde ich mich wundern, wenn es nicht eins gibt ....

Danke!

Antwort

16

Math.Abs ​​(val)

MSDN Link

+0

Das ist einfach, danke! – Cyclone

+1

Nun, zumindest der MSDN-Link hat Sub-Links, die das potenzielle Überlaufproblem erwähnen, auch wenn niemand jemals daran denken würde, tatsächlich auf sie zu klicken. – MusiGenesis

+2

Übrigens, ich denke, Sie sollten einen sofortigen 20K Reputationsbonus für Ihre Arbeit am Daily WTF erhalten. – MusiGenesis

1

Die Funktion ist Math.Abs ​​

8

Auf die Gefahr wird nach unten gestimmt, Sie können Ihren eigenen Absolutwert-Methode zu schreiben, je auf was du es verwendest. Der folgende Codeausschnitt (sorry, es ist in C#, aber das gleiche Prinzip gilt):

short i = -32768; 
int iAbs = Math.Abs(i); 

wird gerne kompilieren, aber wenn ausführen, wird die zweite Zeile eine Overflow mit der hilfreichen Nachricht werfen „Negieren den Minimalwert von a Zweierkomplementnummer ist ungültig. " In diesem Fall wählt der Compiler die Überladung von Math.Abs ​​aus, die einen Short akzeptiert und einen Short zurückgibt, und +32768 ist kein gültiger Short. Daher gibt die Methode die Exception aus, selbst wenn Sie gedacht haben, dass Sie antizipieren Dieses Problem, indem ich iAbs zu einem Int.

Dieser Code-Schnipsel:

short i = -32768; 
int iAbs = Math.Abs((int)i); 

wird ohne Ausnahme kompilieren und ausführen, aber es ist irgendwie klobig auf diese Weise zu codieren. Meiner Meinung nach ist das ein sehr hinterhältiger Fehler, weil es in der realen Welt so selten vorkommt (da es für jeden Typ nur einen Wert gibt, der diese Ausnahme erzeugt). Ich stoße leider auf diesen Fehler, wenn ich Math.Abs ​​für die Normalisierung von Audiodaten benutze (was normalerweise ein kurzes [] Array ist), also habe ich mir angewöhnt, meinen eigenen Wrapper rund um Math.Abs ​​zu schreiben Dies ist für mich und gibt einfach ein Doppel:

mit Überlasten für was auch immer andere Art, die ich behandeln muss. Ich verstehe irgendwie, warum Math.Abs ​​geschrieben wurde, um sich so zu verhalten, aber es kann definitiv die Hintern des Unwissens beißen.

+0

Lol, okay, danke! Ich kann nur überprüfen, ob die Zahl kleiner als Null ist, und wenn es dann ist, multiplizieren Sie es mit einem negativen, was immer funktioniert, es sei denn, die Zahl ist zu groß für Windows zu parsen. – Cyclone

+1

+1. Absolut keine Gefahr, downvooted zu werden! – RobS

+0

Das ist besser: 'Return (i/i) * i' – beppe9000