11

如何在 vb.net 中获得数字的绝对值?

有内置功能吗?我知道我可以自己简单地编写一个函数,但我想先知道是否已经有一个函数。看起来很简单,我大概可以把它分成三行,所以如果没有一行我会很惊讶......

谢谢!

4

4 回答 4

20

数学.Abs( val )

MSDN 链接

于 2009-09-02T00:00:08.807 回答
11

冒着被否决的风险,您可能想要编写自己的绝对值方法,具体取决于您使用它的目的。以下代码片段(对不起,它是在 C# 中,但同样的原则适用):

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

会很高兴地编译,但是在运行时,第二行将抛出一个 OverflowException 并带有有用的消息“否定二进制补码的最小值是无效的”。在这种情况下,因为 i 是 short 类型,编译器会选择 Math.Abs​​ 的重载,它接受一个 short 并返回一个 short,而 +32768 不是一个有效的 short,所以即使你认为你正在预期,该方法也会抛出异常通过使 iAbs 成为 int 来解决这个问题。

这个片段:

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

将毫无例外地编译和执行,但是以这种方式编码有点笨拙。在我看来,这是一个非常狡猾的错误,因为它在现实世界中很少遇到(因为每种类型只有一个值会生成此异常)。不幸的是,每当我使用 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 回答