Próbuję napisać liczbę do dwóch miejsc po przecinku przy użyciu printf()
następująco:dwóch miejsc po przecinku printf()
#include <cstdio>
int main()
{
printf("When this number: %d is assigned to 2 dp, it will be: 2%f ", 94.9456, 94.9456);
return 0;
}
Kiedy uruchamiam program, otrzymuję następujący wynik:
# ./printf
When this number: -1243822529 is assigned to 2 db, it will be: 2-0.000000
Dlaczego tak jest?
Dzięki.
Część -1234 ... reprezentuje 32-bitowy zmiennoprzecinkowy jako liczbę całkowitą. Druga część jest błędna, powinieneś mieć% 2.2f, ale nadal nie mogę wytłumaczyć -0.0000 ... część. Mam jeden poprawny wynik, z tym wyjątkiem, że uruchomienie kodu powoduje dodatkowe 2 przed floatem. –
@nvm: Zera pojawiają się, ponieważ 94.9456 zostało przesunięte na stos jako podwójne (8 bajtów), a% d przetworzyło pierwsze 4 bajty jako liczbę całkowitą, a kolejne 4 bajty były zerami, a kod odczytał te 4 końcowe bajty z pierwszej liczby plus wiodące 4 bajty drugiego spławika i starały się traktować je jako podwójne. Odpowiedź była tak mała, że format stałoprzecinkowy traktował ją jako zero. A to działało na chipie Intela, a nie na maszynie RISC. –
Wygląda na to, że wstawianie liczby całkowitej przed "f", tak jak "% 10f", nie ma żadnego wyniku, tak jak to jest jak pisanie "% f"? Próbowałem tego i po prostu otrzymałem wynik tak, jakby to było "% f". –