【发布时间】:2018-03-16 15:15:50
【问题描述】:
刚结束我第一周的 C++(使用 Visual Studio 2017),我编写了一个程序,询问用户金额并打印纸币和硬币的数量。它在开始时有效,但有时它只是打印错误的数字。(当用户输入 1.28 美元时,它显示 1 美元、1 季度和 2 便士。) 这是我的代码,有什么问题吗?算法还是数据类型?
#include<iostream>
using namespace std;
float Q = 0.25;
float D = 0.10;
float N = 0.05;
float P = 0.01;
float Dollar = 1;
float money;
float dollars, quarters, dimes, nickels, pennies;
int main() //to break money into coins.
{
cout << "how many money do u have?" << endl;
cin >> money;
dollars = (int)money;
quarters = (int)((money - dollars*Dollar)/Q);
dimes = (int)((money - dollars*Dollar - quarters*Q) / D);
nickels = (int)((money - dollars*Dollar - quarters*Q - dimes*D) / N);
pennies = (int)((money - dollars*Dollar - quarters*Q - dimes*D - nickels*N) / P);
cout << "$" << money << " can be break into :" << endl;
cout << dollars << " dollars. " << endl;
cout << quarters << " quarters. " << endl;
cout << dimes << " dimes. " << endl;
cout << nickels << " nickels. " << endl;
cout << pennies << " pennies. " << endl;
}
【问题讨论】:
-
金钱不应该用浮点数来表示。使用表示值的美分数的 int。例如,$1.28 将由 int 值 128 表示。您需要以直接的方式调整数学,但精度不会成为问题。
标签: c++ type-conversion