繁体   English   中英

vb.net中的绝对值

[英]Absolute value in vb.net

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

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

谢谢!

Math.Abs​​(val)

MSDN链接

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

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

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

这个片段:

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

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

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

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

使用Math.Abs

该函数是Math.Abs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM