jeśli napisać kod w C++:C++ podwójnie długo długo
long long d = 999999998.9999999994;
cout<<d;
dostaję wyjście: 999999999
(zaokrąglając w górę)
Ale wyjście z tego kodu:
long long d = 999999998.9999994994;
cout<<d;
jest 999999998
(zaokrąglanie w dół)
Czy to ma coś wspólnego z precyzją. Czy jest jakiś sposób, abym mógł zmienić precyzję. Funkcja floor()
również daje takie samo wyjście.
Zauważyłem również, że jeśli przypisać wartość 8.9999994994
lub 8.9999999994
do d
(powyżej zmiennej). Wyjście to 8
.
Możesz jednoznacznie dodać 0,5 i rzucić podwójnie na długo. –
Obsługa C++ 11? Literały zdefiniowane przez użytkownika mogą pomóc. – Yakk
@OleksandrVerhun Możesz to zrobić, ale jeśli twoim celem jest zaokrąglenie liczby zmiennoprzecinkowej do najbliższej liczby całkowitej, nie powinieneś tego robić. http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 –