2016-03-31 4 views
0

У меня возникли проблемы относительно операции минус в c.scanf не читает double

printf("\nPlease enter your payment:\n", userpayment); 
scanf("%.2f", &userpayment); 

customerchange = userpayment - totalfinal; 
printf("The amount of change is %.2f\n", customerchange); 

Я объявил userpayment и totalfinal как double.

Всякий раз, когда я вводим цену, например; userpayment = 2000 и totalfinal - 1500, выход всегда будет равняться 1500. Каково решение этой проблемы?

Это выход:

Введите Цена изделия: Enter Количество Предмет: Общая сумма платежа: RM1500.00 Это последний пункт? y Rm50 скидка наличными предоставлена ​​клиенту. Итого Оплата перед наличными скидки составляет: 1500 Общей оплата после кассовой скидки составляет 1450

Пожалуйста, введите ваш платеж: Вашего изменения RM-14500,00

+4

Не используйте двойники для валюты – user234461

+1

Это будет легче помочь, если мы видим, как все объявленные переменные. – blazs

+2

Серьезно, не используйте двойные деньги для валюты. Я знаю, что это не то, что вы просили, но лучше всего использовать младший блок с целым типом или использовать выделенный тип данных для представления валюты. Числа с плавающей точкой хороши для представления большого числа чисел, которые не требуют особого внимания. Используя их для валютных сил, вы должны распространять ошибки округления и явное округление всей вашей кодовой базы. – jvalli

ответ

5

Если «userpayment» определяются как двойные, то изменить

scanf("%.2f", &userpayment); 

к

scanf("%lf", &userpayment); 

O Вместо этого вместо переменных вместо переменных.

Как она стоит, вы сканируете поплавок в память двойной, что приводит к непредсказуемому поведению.

+0

Также обратите внимание, что "." specifier недействителен в scanf, хотя, скорее всего, он просто будет проигнорирован. – user295691

+0

Спасибо, я исправил этот недосмотр. – ReflexiveCode

2

У вас есть неправильный спецификатор формата в scanf. Прочтите документацию.

http://www.cplusplus.com/reference/cstdio/scanf/

Вы должны также проверить возвращаемое значение scanf для того, чтобы он был в состоянии разобрать, что вы ожидали, что это разобрать.

Кроме того, если вы читать ваши предупреждения компилятора вы могли бы спасти себя неприятности задавать этот вопрос.

0

Поскольку вы определили переменную в два раза, вы должны использовать:

scanf("%lf", &userpayment); 

Диафрагменное для значений с плавающей точкой, LF (терки) для парной.

+0

Я не заметил опечатку, спасибо. Я исправил это. –

1

Вы путаете формат из Printf, это похоже, но не то же самое, попробуйте просто заменить %.2f на %lf

+0

Я изменил его, и теперь он работает! – Jay

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