我知道這確實會變得很簡單,但我的大腦卻無法正常工作。我需要一個C#中的函數,如果傳遞給該函數的整數具有負號,則返回-1;如果該整數具有正號,則返回1;如果傳遞的數字爲0,則返回0.例如:返回符號的函數
int Sign=SignFunction(-82); // Should return -1
int Sign2=SignFunction(197); // Should return 1
int Sign3=SignFunction(0); // Should return 0
我知道這確實會變得很簡單,但我的大腦卻無法正常工作。我需要一個C#中的函數,如果傳遞給該函數的整數具有負號,則返回-1;如果該整數具有正號,則返回1;如果傳遞的數字爲0,則返回0.例如:返回符號的函數
int Sign=SignFunction(-82); // Should return -1
int Sign2=SignFunction(197); // Should return 1
int Sign3=SignFunction(0); // Should return 0
這已經是在框架中。只需使用Math.Sign ...
int sign = Math.Sign(-82); // Should return -1
int sign2 = Math.Sign(197); // Should return 1
int sign3 = Math.Sign(0); // Should return 0
此外,它將與工作:
int sign4 = Math.Sign(-5.2); // Double value, returns -1
int sign5 = Math.Sign(0.0m); // Decimal, returns 0
// ....
public int SignFunction(int number)
{
return number.CompareTo(0);
}
見我的安東尼Pegram的答覆意見。這是Int32的CompareTo函數返回-1,1或0的實現細節 - 不是指定的行爲。它可以在框架之間改變。使用Math.Sign。 – 2010-07-16 01:56:13
public int SignFunction(int input)
{
if(input < 0) return -1;
if(input > 0) return 1;
return 0;
}
public int Sign(int number)
{
if(number==0)
return 0;
return number/Math.Abs(number);
}
oops意外地編輯了你的解決方案! – 2010-07-15 20:05:39
這沒關係,我犯了一個大錯誤;) – Gregoire 2010-07-15 20:06:59
同樣的問題,因爲喬希以上 - int.MinValue失敗。 – 2010-07-15 20:44:55
public int SignFunction(int number) {
return (number > 0) ?
1 : (number < 0) ?
-1 : number;
}
爲什麼downvote,我想知道。 – 2010-07-15 21:14:38
我並沒有讓你失望,但我認爲這是一個完美的例子,它以「聰明」的方式做事,沒有任何好處。那就是:將它與[Lucas Heneks]提供的答案進行比較(http://stackoverflow.com/questions/3259509/a-function-to-return-a-sign/3259528#3259528)。世界上的程序員不會理解他的版本。你的問題可能會引起一些混淆(不應該,但可能)。他們執行相同的操作。看到參數? – 2010-07-15 22:05:06
@丹我原則上同意你*做事太巧妙。但我不同意三元表達。我不認爲他們太難理解,恕我直言:)。但是,是的,我可以看到這不像一個簡單明瞭的解決方案那樣容易理解。 – 2010-07-15 22:38:19
return input.CompareTo(0);
+1,因爲CompareTo或多或少地以與Math.Sign相同的方式實現。 Math.Sign已將硬編碼爲零;) – 2010-07-15 20:09:08
@Mikael:CompareTo暗示了一種非常不同的用法,不過。 Math.Sign會更好地告訴程序員跟蹤您的原始意圖。 – 2010-07-15 20:32:29
嚴格地說,IComparable.CompareTo只要求它返回的值爲負數,零或正數以指示比較結果 - 它並不要求結果爲-1,0或1.int16的shortTo返回的實現返回(int)x - (int)y for x.CompareTo(y)。 實際上,要處理CompareTo的結果,您可能需要將它傳遞給Math.Sign以獲取約束值。 – 2010-07-16 01:52:37
int sign = Math.Sign(number);
它已經存在。
如果Math.Sign
不存在,我會做到這一點:
return x == 0 ? 0 : x/Math.Abs(x);
+1 DRY/DRTW .... – 2010-07-15 20:07:29
一個完美的現有輪 – seanb 2010-07-15 20:07:55
哈哈這些功能之一,我從來不需要使用,所以永遠不知道它存在。謝謝! – Icemanind 2010-07-15 20:08:18