是否有可能有一個類或結構包含一個float只能介于 0 和 359.999 之間的值......如果你將它增加到超過它的最大值,它會重置為 0 或在減少到 0 時低于 360 的正值。
實施后,它看起來像這樣:
Degrees angle = 359;
angle = 2;
Console.WriteLine(angle);
輸出:
1
或者當遞減到 0 以下時:
Degrees angle = 0;
angle -= 2;
Console.WriteLine(angle);
輸出:
358
它還需要能夠增加/減少高于 360f 的值,因此將 361.5 添加到 0 將輸出 1.5
uj5u.com熱心網友回復:
結合運算子多載和隱式關鍵字,很容易做到:
public readonly struct Degrees
{
private readonly float _value;
public Degrees(float value)
{
_value = value < 0
? 360 - (Math.Abs(value) % 360)
: value % 360;
}
public override string ToString()
=> _value.ToString();
public static implicit operator Degrees(float f)
=> new Degrees(f);
public static Degrees operator (Degrees a, Degrees b)
=> new Degrees(a._value b._value);
public static Degrees operator -(Degrees a, Degrees b)
=> new Degrees(a._value - b._value);
}
現在你可以這樣寫:
Degrees angle = 359f;
angle = 2f;
Console.WriteLine(angle);
這將輸出:
1
或這個:
Degrees angle = 0;
angle -= 2;
Console.WriteLine(angle);
uj5u.com熱心網友回復:
你可以像創建 strct
public struct Degrees
{
private decimal _angle;
public decimal angle
{
get { return _angle; }
set { _angle = value % 360; }
}
}
然后將其用作
Degrees degrees = new Degrees();
degrees.angle = 361.5m 0m;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482050.html
