c++ - 收银机美分计算不起作用?
问题描述
你应该拿回你的美分的部分不想工作,我试图尽可能地优化我的代码以减少代码行。
有什么帮助吗?
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double iAmount_due { 0 };
double iGiven_money { 0 };
double iMoney_back;
iMoney_back = iGiven_money - iAmount_due;
int iMoney100 { 0 };
int iMoney50 { 0 };
int iMoney20 { 0 };
int iMoney10 { 0 };
int iMoney5 { 0 };
int iMoney2 { 0 };
int iMoney1 { 0 };
int iCent25 { 0 };
int iCent10 { 0 };
int iCent5 { 0 };
int iCent1 { 0 };
cout << "Enter the amount due please: " << endl;
cin >> iAmount_due;
cout << "Enter the amount given please: " << endl;
cin >> iGiven_money;
if (iGiven_money >= iAmount_due) {
iMoney_back = iGiven_money - iAmount_due;
cout << "We will give you : " << iMoney_back << " $ back" << endl;
}
else {
cout << "No money back" << endl;
}
while (iGiven_money >= iAmount_due) {
iMoney100 = iMoney_back / 100;
iMoney_back = (int)iMoney_back % 100;
cout << "You will get: " << iMoney100 << " X 100 $ " << endl;
iMoney50 = iMoney_back / 50;
iMoney_back = (int)iMoney_back % 50;
cout << "You will get: " << iMoney50 << " X 50 $ " << endl;
iMoney20 = iMoney_back / 20;
iMoney_back = (int)iMoney_back % 20;
cout << "You will get: " << iMoney20 << " X 20 $ " << endl;
iMoney10 = iMoney_back / 10;
iMoney_back = (int)iMoney_back % 10;
cout << "You will get: " << iMoney10 << " X 10 $ " << endl;
iMoney5 = iMoney_back / 5;
iMoney_back = (int)iMoney_back % 5;
cout << "You will get: " << iMoney5 << " X 5 $ " << endl;
iMoney2 = iMoney_back / 2;
iMoney_back = (int)iMoney_back % 2;
cout << "You will get: " << iMoney2 << " X 2 $ " << endl;
iMoney1 = iMoney_back / 1;
iMoney_back = (int) iMoney_back % 1;
cout << "You will get: " << iMoney1 << " X 1 $ " << endl;
iCent25 = iMoney_back / 0.25;
iMoney_back = fmod ((int)iMoney_back, 0.25);
cout << "You will get: " << iCent25 << " X 0.25 $ " << endl;
iCent10 = iMoney_back / 0.10;
iMoney_back = fmod ((int)iMoney_back , 0.10);
cout << "You will get: " << iCent10 << " X 0.10 $ " << endl;
iCent5 = iMoney_back / 0.5;
iMoney_back = fmod ((int)iMoney_back , 0.5);
cout << "You will get: " << iCent5 << " X 0.5 $ " << endl;
iCent1 = iMoney_back / 0.1;
iMoney_back = fmod ((int)iMoney_back, 0.1);
cout << "You will get: " << iCent1 << " X 0.1 $ " << endl;
break;
}
return 0;
}
解决方案
这是你的问题:
iMoney_back = (int)iMoney_back % 100;
让我猜猜:您尝试iMoney_back % 100
并发现您不能将 mod ( %
) 与 double 一起使用。因此,您只需将其转换为 int。
虽然这将编译得很好,但该模运算的结果仍然是一个 int。换句话说,您只是丢失了iMoney_back
.
你可能想要fmod()
:
iMoney_back = fmod(iMoney_back, 100);
此外,看起来您实际上是.1
为 1 美分值而不是.01
. 修复这些和美分上的轻微舍入错误将向您展示这是有效的:https ://ideone.com/0cWcuQ
或者,您可以创建iMoney_back_cents
一个 int 变量,这样您甚至不需要担心双精度数(这可能会导致一些不精确的问题):
int iMoney_back_cents = (iMoney_back * 100) + .5;
推荐阅读
- javascript - 使用 Owl Carousel 2,禁用在桌面上拖动并启用点击功能
- api - 如何在没有 EDM 的情况下在 .Net Core 上使用 Odata $batch
- nativescript - Nativescript @Input 字符串不通过,但数字通过
- python - 带有moviepy的FFMPEG
- r - 是否可以将shinydashboardPlus中的左右侧边栏修复为永久打开?
- zoho - Zoho Deluge:如何显示对象或变量的类型?
- android - 如何在Android中每天早上9点从数据库中获取数据?
- bash - Bash 4.2 关联数组抛出“坏数组下标”错误
- git - Gvim/Git 插件错误 E492:不是编辑器命令:GitStatus
- apache-spark-sql - apache spark sql表覆盖问题