Cố gắng mô phỏng rollover của đồng hồ 24 giờ bằng tay (với toán học so với sử dụng các lớp thời gian). Phần gia tăng là dễ dàng để tìm ra cách để cuộn từ 23:00 đến 0:00 và từ, nhưng làm cho nó đi theo cách khác là hóa ra là thực sự khó hiểu. Dưới đây là những gì tôi có cho đến thời điểm này:C#: giảm một đồng hồ bằng cách sử dụng phép toán modulus
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin/60;
//increment or decrement the hour
if((double)newMin % 60 < 0 && (double)newMin % 60 > -1)
hourIncrement = -1;
Console.WriteLine("Hour increment is {0}: ", hourIncrement);
}
Vấn đề mà việc tìm kiếm là khi quay ngược lại, nếu mô đun nằm giữa các số, nó sẽ không giảm một cách chính xác. Ví dụ: 12:00 và bạn trừ đi 61 phút, chúng tôi biết thời gian là 10:59 vì giờ sẽ quay lại 1 giờ để đi từ 12:00 đến 11:59, sau đó quay lại để đi từ 11:00 đến 10:59. Thật không may là cách tính toán nó: newMin% 60 trong trường hợp này, chỉ lấy rollback giờ đầu tiên, nhưng kể từ khi rollback thứ hai là kỹ thuật -1.0166 như phần còn lại, và vì mod chỉ trả về một số nguyên, làm tròn nó đi. Im chắc chắn im thiếu một số toán học cơ bản ở đây, nhưng ai đó có thể giúp tôi ra?
EDIT: Tôi đã viết một số cách dài và ngắn. Một số thì gần hơn những người khác, nhưng tôi biết điều này đơn giản hơn vẻ bề ngoài. Tôi biết điều này dường như là một "wtf anh ấy đang làm", nhưng bạn sẽ có thể nhìn thấy cơ bản những gì Im đang cố gắng làm. Tăng thêm một chiếc đồng hồ và việc di chuyển nó từ 23:59 đến 0:00 thật dễ dàng. Đi ngược lại đã được chứng minh là không dễ dàng như vậy.
OK, đây là giá trị gia tăngThay đổi với rollover. Đơn giản. Nhưng hãy cố lùi lại. Không hoạt động.
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin/60;
min = newMin % 60;
Console.WriteLine("The new minute is {0} and the hour has incremented by {1}", min, hourIncrement);
}
bạn có thể thêm một chút chi tiết này, đặc biệt là một ví dụ sử dụng và nhà nước dự kiến của biến toàn cầu? – steinar
Giá trị nào 'min' và' incr' có? – ChrisF
Tôi tin rằng tôi đã đưa ra những ví dụ đó. Về cơ bản, làm thế nào để tôi mã decrement để có 12:00 - 0:61 = 10:59 và có nó làm việc cho gia số là tốt. – Sinaesthetic