我有一個代表形狀的類。 Shape類有一個名爲Angle的屬性。我希望此屬性的setter自動將值包裝到範圍[0,359]中。在C#中,我如何實現像谷歌calc一樣的模數?
不幸的是,一個簡單的_Angle = value % 360;
只適用於正數。在C#中,-40 % 360 == -40
。谷歌計算公司the way I want it。值應該是320.
C#中最優雅的解決方案是什麼?
這裏是到目前爲止,我已經得到了最好的方法:
public double Angle {
get { return _Angle; }
set {
if (value >= 0) {
_Angle = value % 360;
}
else {
_Angle = value - (360 * ((int)(value/360) - 1));
}
}
}
編輯:
謝謝你們,我現在有:
public double Angle {
get { return _Angle; }
set {
_Angle = (value % 360) + ((value < 0) ? 360 : 0);
}
}
..這是一個很大更好:)
我強烈不鼓勵使用mod操作,因爲硬件mod/division很慢。如果您能夠將數據擴展爲2的冪,則可以使用利用位掩碼的更好的解決方案。 – 2009-04-06 20:10:49
@TrevorBoydSmith:C#編譯器不允許在整數情況下優化除法和位模運算嗎?在浮動值的情況下,您可以優化位操作嗎? – 2012-05-02 14:29:59