首页 > 解决方案 > 有没有一种优雅的方法可以将正数转换为+1,将负数转换为-1?

问题描述

我有一个高性能组件需要将值转换为 -1、+1 或 0。

    static int ToOne(double value) {
        return (int)(value == 0D ? value : value / Math.Abs(value));
    }

上述方法都不优雅,有没有其他方法可以做到这一点?

标签: c#.net

解决方案


您基本上重新创建了Math.Sign

返回一个表示数字符号的整数。

Return value    Meaning
-1              value is less than zero.
0               value is equal to zero.
1               value is greater than zero.

测试代码:

Console.WriteLine(ToOne(-5));
Console.WriteLine(ToOne(-0.1));
Console.WriteLine(ToOne(0));
Console.WriteLine(ToOne(0.1));
Console.WriteLine(ToOne(5));

输出:

-1
-1
0
1
1

并与Math.Sign

Console.WriteLine(Math.Sign(-5));
Console.WriteLine(Math.Sign(-0.1));
Console.WriteLine(Math.Sign(0));
Console.WriteLine(Math.Sign(0.1));
Console.WriteLine(Math.Sign(5));

输出:

-1
-1
0
1
1

推荐阅读