vb.net中的绝对值

Cyc*_*one 9 .net vb.net absolute-value

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

有内置的功能吗?我知道我可以自己编写一个函数,但我想先知道是否已有一个函数.看起来很简单,我可能会用三行来制作它,所以如果没有一行我会感到惊讶....

谢谢!

Ale*_*lis 18

Math.Abs​​(val)

MSDN链接

  • 顺便说一下,我认为你应该获得你在The Daily WTF工作的即时20K声望奖励. (2认同)

Mus*_*sis 9

如果被投票放弃,您可能需要编写自己的绝对值方法,具体取决于您使用它的方式.以下代码片段(抱歉它在C#中,但同样的原则适用):

short i = -32768;
int iAbs = Math.Abs(i);
Run Code Online (Sandbox Code Playgroud)

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

这个片段:

short i = -32768;
int iAbs = Math.Abs((int)i);
Run Code Online (Sandbox Code Playgroud)

将编译和执行没有异常,但这种方式编码有点笨拙.在我看来,这是一个非常偷偷摸摸的错误,因为它在现实世界中很少遇到(因为每种类型只有一个值会产生这个异常).不幸的是,每当我使用Math.Abs​​来规范化音频数据(通常是一个简短的[]数组)时,我都会遇到这个错误,所以我养成了自己编写自己的数据包的习惯,这个数据包处理所有的数据.这对我而言只是返回一个双:

public double AbsThatDoesntSuck(short value)
{
    return Math.Abs((double)value);
}
Run Code Online (Sandbox Code Playgroud)

对于我需要处理的任何其他类型的重载.我有点理解为什么Math.Abs​​被编写为以这种方式运行,但它绝对可以咬住不知情的后盾.