Istnieje dziwne zachowanie, którego nie mogę zrozumieć. Uzgodniono, że liczba zmiennoprzecinkowa to przybliżenia, więc nawet operacje, które w sposób oczywisty zwracają liczbę bez liczb dziesiętnych, mogą być przybliżone do wartości dziesiętnych.Problem konwersji z int na float
Robię to:
int num = (int)(195.95F * 100);
a ponieważ jest to operacji zmiennoprzecinkowej otrzymuję 19594 zamiast 19595 .. ale jest to rodzaj poprawne.
Co mnie zastanawia to, że jeśli zrobię
float flo = 195.95F * 100;
int num = (int) flo;
uzyskać poprawny wynik 19595.
Każdy pomysł, dlaczego tak się dzieje?
z ciekawości, co dzieje się podczas korzystania z Convert.ToInt32? – AvatarOfChronos
Konwersja przy użyciu Convert.ToInt32 zwróci prawidłowy wynik zarówno w scenariuszu – CodeClimber
Związany sekcji [różnice między IEEE 754 implementacjach] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html # 3098), który pojawia się na połączonej stronie internetowej jako dodatek anonimowy autor do tekstu _Czy każdy informatyk powinien wiedzieć o arytmetyki zmiennoprzecinkowej_. –