Tôi có một lớp đại diện cho một hình dạng. Lớp Shape có một thuộc tính được gọi là Angle. Tôi muốn setter cho thuộc tính này tự động quấn giá trị vào trong phạm vi [0,359].Trong C#, làm cách nào để thực hiện mô đun như google calc?
Thật không may, một đơn giản _Angle = value % 360;
chỉ hoạt động với số dương. Trong C#, -40 % 360 == -40
. Google calc làm điều đó the way I want it. Giá trị phải là 320.
Giải pháp thanh lịch nhất trong C# là gì?
Đây là cách tốt nhất mà tôi đã có cho đến nay:
public double Angle {
get { return _Angle; }
set {
if (value >= 0) {
_Angle = value % 360;
}
else {
_Angle = value - (360 * ((int)(value/360) - 1));
}
}
}
Edit:
Thanks guys, bây giờ tôi có:
public double Angle {
get { return _Angle; }
set {
_Angle = (value % 360) + ((value < 0) ? 360 : 0);
}
}
đồi khế, đồi là rất nhiều tốt hơn :)
Tôi sẽ mạnh mẽ không khuyến khích sử dụng thao tác mod vì mod/phân vùng phần cứng chậm. Nếu bạn có thể mở rộng dữ liệu của bạn thành một sức mạnh của hai, bạn có thể sử dụng một giải pháp tốt hơn để tận dụng các mặt nạ bit. –
@TrevorBoydSmith: Trình biên dịch C# có được phép tối ưu hóa phép chia và mô đun thành bit trong trường hợp các số nguyên không? Bạn có thể tối ưu hóa hoạt động bit trong trường hợp các giá trị thả nổi không? –