ter*_*tyl 110
你可以这样做
public decimal FindDifference(decimal nr1, decimal nr2)
{
return Math.Abs(nr1 - nr2);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*tin 30
result = Math.Abs(value1 - value2);
Run Code Online (Sandbox Code Playgroud)
Mec*_*cki 21
只是添加这个,因为没人在这里写:
虽然你可以肯定使用
Math.Abs(number1 - number2);
Run Code Online (Sandbox Code Playgroud)
这是最简单的解决方案(并且接受了答案),我想知道没有人写出Abs实际上做了什么.这是一个适用于Java,C,C#的解决方案,以及使用C语法的所有其他语言:
int result = number1 - number2;
if (result < 0) {
result *= -1;
}
Run Code Online (Sandbox Code Playgroud)
就这么简单.你也可以像这样写:
int result = number1 > number2 ? number1 - number2 : number2 - number1;
Run Code Online (Sandbox Code Playgroud)
一旦编译完毕,最后一个可能会更快; 两者都有一个if和一个减法,但第一个在某些情况下有乘法,最后一个没有.为什么只在某些情况下?有些CPU有一个"交换符号"操作,编译器识别*= -1它做什么,它只是交换符号,所以它不是乘法,而是为提供它的CPU发出交换符号操作,这个操作和CPU操作一样快可以得到(通常一个时钟周期).
第一个代码示例实际上正在执行Abs在大多数实现中所做的事情,以便在支持的情况下使用"交换符号",最后一个代码将在没有"交换符号"的CPU上更快,并且乘法比添加更昂贵(在现代CPU,它们通常同样快速).
我认为在C#中不可能,你可能需要考虑在Assembler中实现它