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.14

Pro 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čí chybou expected 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ží jen 12. Desetinná část se zahodí.

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.70

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

4/11