C programming для начинающих: часть 7 – целые числа и дроби

 

Предыдущая часть.

Возьмём следующий пример:

#include <stdio.h>

int main(int argc, char **argv) {
        int subtotal;
        int tax;
        int grandtotal;
        double taxrate;

        taxrate = 0.175;
        subtotal = 200;
        tax = subtotal * taxrate;
        grandtotal = subtotal + tax;

        printf( "The tax on %d is %d, so the grand total is %d.\n", subtotal, tax, grandtotal );
        return 0;
}

Цель программы – подсчитать общую стоимость какого-то товара, где subtotal – его цена без налога, taxrate – % налога (taxrate = 0.175 будет %17.5 налога), grandtotal – будет содержать полную цену, а tax – сумму налога.

Затем – мы получим сумму налога:

...
        tax = subtotal * taxrate;
...

И с её помощью – полную цену товара:

...
        grandtotal = subtotal + tax;
...

И в конце – используем уже знакомую функцию printf() для отображения цены:

...
printf( "The tax on %d is %d, so the grand total is %d.\n", subtotal, tax, grandtotal );
...

Проверяем:

[simterm]

$ gcc int_double.c -o int_double
$ ./int_double 
The tax on 200 is 35, so the grand total is 235.

[/simterm]

В этом примере – мы используем целочисленный тип для переменных subtotal и tax, что в результате возвращает нам целые числа:

The tax on 200 is 35, so the grand total is 235.

Если же требуется точность до долей значения – используйте тип данных double, например:

#include <stdio.h>

int main(int argc, char **argv) {
        double subtotal;
        double tax;
        double grandtotal;
        double taxrate;

        taxrate = 0.175;
        subtotal = 200;
        tax = subtotal * taxrate;
        grandtotal = subtotal + tax;

        printf( "The tax on %.2f is %.2f, so the grand total is %.2f.\n", subtotal, tax, grandtotal );
        return 0;
}

Используя тип double для переменных и спецификатор %f (floating) – мы получим точное значение:

[simterm]

$ gcc int_double2.c -o int_double2
$ ./int_double2 
The tax on 200.00 is 35.00, so the grand total is 235.00.

[/simterm]

Кроме того – в спецификаторе можно указать кол-во символов, которые требуется вывести после дроби – %.2f.

Изменим его:

...
printf( "The tax on %.4f is %.4f, so the grand total is %.4f.\n", subtotal, tax, grandtotal );
...

Результатом будет:

[simterm]

$ ./int_double2 
The tax on 200.0000 is 35.0000, so the grand total is 235.0000.

[/simterm]

Продолжение – часть 8 – константы.