2010-02-19 39 views

Trả lời

21

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.

5

Làm thế nào về (x/15) * 15?

+0

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) –

+0

Miễn là nó là một int. –

3

Bạn có thể sử dụng phân chia số nguyên -

int number = 43; 
int newNumber = number/15; 
int rounded = newNumber * 15; 
+1

gee ... Tôi phải đúng. –

+0

@Không hoàn tiền Không trả lại: Chỉ khi x là một loại số nguyên ... –

10

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 
+3

Đảm bảo rằng bạn vừa với một mẫu nhà máy trừu tượng trong đó có thiết kế tách rời hơn. – Pierreten

+3

Xin chào, tôi là một người nghiện phương pháp mở rộng. Tôi cũng không có lời xin lỗi, p – johnc

4

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; 
    } 
} 
+2

Ô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

+0

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ả ... –

+0

Điều này cho câu trả lời sai cho các số âm. –

0

Đâ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) 
Các vấn đề liên quan