Có ai có cách tốt để làm tròn số xuống số một số từ 0 đến 59 đến gần nhất 15. Tôi đang sử dụng C# 3.5.C# - làm tròn giá trị thời gian xuống giờ quý gần nhất
Vậy ...
- 1 sẽ là 0
- 29 sẽ là 15
- 30 sẽ là 30
vv vv
Rất cám ơn.
Có ai có cách tốt để làm tròn số xuống số một số từ 0 đến 59 đến gần nhất 15. Tôi đang sử dụng C# 3.5.C# - làm tròn giá trị thời gian xuống giờ quý gần nhất
Vậy ...
vv vv
Rất cám ơn.
x = x - (x % 15)
sẽ là một giải pháp mà không dựa trên phân chia số nguyên.
Làm thế nào về (x/15) * 15?
Bạn có thể sử dụng phân chia số nguyên -
int number = 43;
int newNumber = number/15;
int rounded = newNumber * 15;
gee ... Tôi phải đúng. –
@Không hoàn tiền Không trả lại: Chỉ khi x là một loại số nguyên ... –
Là một phương pháp khuyến nông trên datetime
public static DateTime RoundDown(this DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour, (dateTime.Minute/15) * 15, 0);
}
sử dụng
DateTime date = dateTime.Now.RoundDown();//for example
Tôi không biết về một cuộc gọi thư viện cho điều này (như .Round (...)), có lẽ và phương pháp mở rộng sẽ phù hợp độc đáo?
Tôi sẽ sử dụng câu lệnh IF đơn giản.
Nếu tốc độ là vấn đề, hãy thử tuyên bố chuyển đổi mở rộng cho từng giá trị. Sử dụng kiểm tra đơn vị để xem những gì nhanh hơn nếu đó là một vấn đề.
Để được hoàn tất ...
//...
[TestMethod]
public void round_down()
{
Assert.AreEqual(-5.RoundDown(), 0);
Assert.AreEqual(0.RoundDown(), 0);
Assert.AreEqual(1.RoundDown(), 0);
Assert.AreEqual(20.RoundDown(), 15);
Assert.AreEqual(42.RoundDown(), 30);
Assert.AreEqual(48.RoundDown(), 45);
Assert.AreEqual(59.RoundDown(), 45);
Assert.AreEqual(90.RoundDown(), 45);
}
// ...
public static class Ext
{
public static int RoundDown(this int val)
{
if (val < 0)
return 0;
if (val < 15)
return 0;
if (val < 30)
return 15;
if (val < 45)
return 30;
return 45;
}
}
Ông cũng có thể sử dụng một khuôn khổ mocking để giả ra số nguyên quá cho testability tốt hơn (cộng với mà không có tất cả các chi phí phân bổ số nguyên trên stack) – Pierreten
um không ... điều thời gian là vì tôi giả định rằng đây là trên một trang web và có lẽ rất nhiều nó đang xảy ra, đó là tất cả ... –
Điều này cho câu trả lời sai cho các số âm. –
Đây là nơi mà các nhà điều hành mô đun do thỏa thuận thực sự tiện dụng
number - (number % 15)
Bạn sẽ phải đảm bảo rằng x là một kiểu số nguyên, đầu tiên, tuy nhiên ... (Hoặc, ít nhất, hãy cast x/15 to int) –
Miễn là nó là một int. –