Desetinná čísla
Do proměnné typu int se vejdou jen celá čísla. Cena ale může mít haléře a výška může být 1,68 m. Pro čísla s desetinnou částí má C datový typ double:
double cena = 12.5;Desetinná čísla se v C píšou s desetinnou tečkou, ne s čárkou jako v češtině: 12.5, -0.25, 3.0.
Proměnnou typu double vypíšete pomocí %f místo %d (f podle anglického floating point, pohyblivá řádová čárka: tak počítač ukládá desetinná čísla). %f vypíše vždy šest desetinných míst. Obvykle jich chcete méně, a tak jejich počet napište mezi % a f za tečku: %.2f vypíše dvě desetinná místa, %.1f jedno. Číslo se přitom zaokrouhlí:
double cena = 12.5;
double pi = 3.14159;
printf("%f\n", cena);
printf("%.2f\n", cena);
printf("%.1f\n", cena);
printf("%.2f\n", pi);Vypíše:
12.500000
12.50
12.5
3.14Pro ceny se hodí právě %.2f: dvě desetinná místa jako na účtence.
Formátovací značka musí odpovídat hodnotě: %d pro int, %f pro double. Samotný printf nepozná, co dostal, a řídí se jen formátovacím řetězcem. Na jiném počítači by špatná značka mohla vypsat nesmyslné číslo, a proto je to na tomto webu chyba už při překladu:
#include <stdio.h>
int main(void) {
double cena = 12.5;
printf("Cena: %d\n", cena);
return 0;
}Překladač ohlásí:
main.c:5:26: error: format specifies type 'int' but the argument has type 'double' [-Werror,-Wformat]Formátovací řetězec čeká int, ale hodnota (odborně argument) je typu double. Pod prvním řádkem vám překladač dokonce navrhne %f. Platí to i obráceně: %f s hodnotou typu int skončí chybou format specifies type 'double' but the argument has type 'int'.
Další typické chyby:
- Desetinná čárka:
double cena = 12,5;skončí chybouexpected identifier or '('. Čárka má v C jiný význam, desetinná čísla pište s tečkou. - Desetinné číslo v proměnné typu
int:int cena = 12.5;se přeloží, ale do proměnné se uloží jen12. Desetinná část se zahodí.
Jak psát:
Pokyny
Pod to vytvořte proměnnou cena typu double s hodnotou 24.9: cenu jednoho sešitu.
Na další řádek ji vypište pomocí %f takto: Cena: 24.900000.
Šest desetinných míst je na cenu moc. Změňte %f na %.2f, aby se na řádku ukázalo Cena: 24.90.
Na další řádek vypište, kolik stojí všechny tři sešity: pocet * cena. Výpočet s hodnotou typu double dá zase double, takže opět použijte %.2f:
Celkem: 74.70Začněte programovat zdarma
4/11