如何在 vb.net 中获得数字的绝对值?
有内置功能吗?我知道我可以自己简单地编写一个函数,但我想先知道是否已经有一个函数。看起来很简单,我大概可以把它分成三行,所以如果没有一行我会很惊讶......
谢谢!
如何在 vb.net 中获得数字的绝对值?
有内置功能吗?我知道我可以自己简单地编写一个函数,但我想先知道是否已经有一个函数。看起来很简单,我大概可以把它分成三行,所以如果没有一行我会很惊讶......
谢谢!
数学.Abs( val )
冒着被否决的风险,您可能想要编写自己的绝对值方法,具体取决于您使用它的目的。以下代码片段(对不起,它是在 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 被写成这样,但它肯定会咬住不知情的人。
使用Math.Abs 。
函数是 Math.Abs