11

vb.netで数値の絶対値を取得するにはどうすればよいですか?

機能は内蔵されていますか?自分で関数を簡単にコーディングできることは知っていますが、最初に関数がすでに存在するかどうかを知りたいです。とてもシンプルなようで、たぶん3行で作れるので、1行ないとびっくりします…。

ありがとう!

4

4 に答える 4

20

Math.Abs​​(val)

MSDNリンク

于 2009-09-02T00:00:08.807 に答える
11

反対票を投じられるリスクがありますが、使用目的に応じて、独自の絶対値メソッドを作成することをお勧めします。次のコードスニペット(C#で申し訳ありませんが、同じ原則が適用されます):

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

は正常にコンパイルされますが、実行すると、2行目でOverflowExceptionがスローされ、「2の補数の最小値を否定することは無効です」という有用なメッセージが表示されます。この場合、iはタイプshortであるため、コンパイラはshortを受け入れてshortを返すMath.Abs​​のオーバーロードを選択し、+ 32768は有効なshortではないため、予期していたとしても、メソッドは例外をスローします。 iAbsをintにすることでこの問題を解決します。

このスニペット:

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

例外なくコンパイルおよび実行されますが、この方法でコーディングするのはちょっと不格好です。私の意見では、これは非常に卑劣なエラーです。これは、現実の世界ではめったに発生しないためです(この例外を生成するタイプごとに値が1つしかないため)。残念ながら、オーディオデータ(通常はshort []配列)を正規化するためにMath.Abs​​を使用するたびにこのエラーが発生するため、すべてを処理するMath.Abs​​の周りに独自のラッパーを作成する習慣があります。これは私にとってはダブルを返します:

public double AbsThatDoesntSuck(short value)
{
    return Math.Abs((double)value);
}

私が処理する必要がある他のタイプのオーバーロードで。Math.Abs​​がこのように動作するように作成された理由は理解できますが、気付かないうちに確実に背後を食いつぶす可能性があります。

于 2009-09-02T01:01:21.517 に答える
1

Math.Abs​​を使用します。

于 2009-09-01T23:59:45.843 に答える
1

関数はMath.Abs​​です。

于 2009-09-01T23:59:56.670 に答える