2016-01-02 7 views
-3

Я пытаюсь написать код в соответствии с проблемой. Но я столкнулся с проблемой округления. Может ли кто-нибудь объяснить мне, где я столкнулся с проблемой?Где я ошибаюсь? Я не ожидаю выхода

М = ​​12, Т = 20, X = 8 = наконечник (20 × 12) /100=2.4 налог = (8 × 12) /100=0.96 конечная цена = 12 + 2,4 + 0,96 = 15,36 Официально цена еды составляет $ 15,36, , но округляется до ближайшего доллара (целое число), питание составляет 15 долларов США.

Вот мой полный код:

#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int main() { 
    int t, x; 
    double m; 
    scanf("%lf", &m); 
    scanf("%d", &t); 
    scanf("%d", &x); 
    double tip, tax; 

    tip= m*t/100; 
    tax= t*x/100; 
    int total= (int)(round(tip + tax +m)); 

    printf("The final price of the meal is $%d.", total); 
    return 0; 
} 

Когда я беру вход 15.91,15,10 он показывает вывод 19 вместо 20

Где я сделал ошибки?

+2

Почему налог рассчитывается на t вместо того, чтобы m? – Jack

+2

Нет, это не ваш полный код. –

+2

't' и' x' не объявлены. – haccks

ответ

0

Когда вы
tax= t*x/100;
вы делаете целочисленного деления, поэтому она будет округлена.

Вы будете иметь 15 * 10/100 = 1, вместо 1.5

Кроме того, у вас есть t*x вместо m*x, как вы выразились на ваш вопрос

M=12, T=20, X=8 
tip=(20×12)/100=2.4 
    T M 
tax=(8×12)/100=0.96 
    X M 

Изменить его до

tip= m*t/100.0; tax= m*x/100.0;

И вы получите ожидаемый 20 в качестве окончательного результата

+0

хорошо рассмотрим ввод '12.00 20 8' выход будет' 15', но ваш код показывает '16'. То, как вы пишете код, будет проходить только 1 тестовый пример, но в другом случае он упадет. – orvi

+2

Нет, это неверно. Поскольку 'm',' t' и 'x' определены как' double', деление _will_ будет плавающей точкой, даже без '100.0' –

+0

Я реализую ту же логику как java, так и python, и она отлично работает. Но он показывает неправильный вывод в C – orvi

Смежные вопросы