Następne 2 wiersze dodają tę samą kwotę do tej samej daty, a część daty wyników jest taka sama, ale jakoś tam jest różnica w części czasu!Wydanie .NET Adddays
(new DateTime(2000,1,3,18,0,0)).AddDays(4535);
(new DateTime(2000,1,3,18,0,0)).AddMonths(149);
dostaniesz różnicę 15 sekund, a oba są z co najmniej roundable do dni, nie wiem, dlaczego tak się stało, ale to się zdarza tylko z AddDays, ale nie AddMonths (nawet z tysiącami miesięcy dodawanych)
Edycja 1
Więc próbowałem zrobić przykładowy projekt, ale bez powodzenia. Jeśli uruchomię mój główny projekt i wstawię przykładowe linie do zegarków, niż otrzymam 2 oddzielne wartości, jeśli zrobię nowy początek, problem nie istnieje. Projekt to 3.5, C#, vs2010, win7hp x64 (proj: x86). Próbuję odtworzyć to także w świeżym małym projekcie, odpiszę, jeśli go otrzymam.
Są to moje wyniki w głównym projektu (copeid od zegarków!):
(new DateTime(2000, 1, 3, 18, 0, 0)).AddDays(4535).Ticks
634743432153600000 long
(new DateTime(2000, 1, 3, 18, 0, 0)).AddMonths(149).Ticks
634743432000000000 long
Edycja 2
udało mi się sprowadzić jeszcze więcej. Posiadamy własny komponent, podstawę panelu, czerpimy z niego directx. Jeśli sprawię, że visible = false, than visible = true, wtedy błąd pojawi się przed visible = true (lub show()), obliczenia są poprawne. Co na świecie może tam być, że wynik dostaje coś innego od formuły, w której nie użyto żadnej zmiennej. Kultura nie jest naruszona w składniku ..
może być problemem ze względu na typ danych, ponieważ AddDays wykonuje podwójne. Wydaje się jednak, że różnica powinna wynosić znacznie mniej niż 15 sekund. Sprawdź http://en.wikipedia.org/wiki/Double_precision, aby zobaczyć, jak to tylko przybliża wartości. –
Czy próbowałeś odwrócenie kolejności metody wymaga, aby zobaczyć, jeśli uzyska ten sam wynik? Prawdopodobnie nie zrobi to różnicy, ale jestem ciekawy. –
I nie były w stanie odtworzyć ten (na kompilator C# 4). Jakie jest twoje środowisko? – SWeko