Cyc*_*one 9 .net vb.net absolute-value
你如何获得vb.net中数字的绝对值?
有内置的功能吗?我知道我可以自己编写一个函数,但我想先知道是否已有一个函数.看起来很简单,我可能会用三行来制作它,所以如果没有一行我会感到惊讶....
谢谢!
如果被投票放弃,您可能需要编写自己的绝对值方法,具体取决于您使用它的方式.以下代码片段(抱歉它在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被编写为以这种方式运行,但它绝对可以咬住不知情的后盾.