在使用小数的简单c++程序中遇到问题
Having trouble with simple c++ program using decimals.
//Purpose: To calculate the price to pay an author
//Programmer: Brandon C Ballard
//Last Updated: 2/20/2014
#include <iostream>
#include <cstdlib>
using namespace std;
//function prototype
float TotalPay(int numWords, char Level);
int main()
{
float TotalPay;
int numWords;
char Level;
int amtToPay;
cout << "Please enter number of words: ";
cin >> numWords;
cout << endl;
cout << "Please enter a Level, A,B, or C: ";
cin >> Level; cout << endl << endl;
//calculate price per word
if (numWords < 7500)
amtToPay = numWords * .08;
else if (numWords >= 7500 && numWords < 8000)
amtToPay = 600;
else if (numWords >= 8000 && numWords < 17500)
amtToPay = numWords * .075;
else if (numWords >= 17500 && numWords < 19000)
amtToPay = 1313;
else
amtToPay = numWords *.07;
//calculate the Level of the author
if (Level == 'C' or Level == 'c')
Level = 1;
else if (Level == 'B' or Level == 'b')
Level = 1.25;
else if (Level == 'A' or Level == 'a')
Level = 1.75;
TotalPay = amtToPay * Level;
cout << "Length of Story (words): "; cout << numWords; cout << endl << endl;
cout << "Amount Due Author: "; cout << "$"; cout << TotalPay; cout << endl << endl << endl;
system("PAUSE");
return 0;
}//end main function
我的导师希望我写一个程序,可以计算出向杂志提交文章的作者的报酬。付给作者的钱是根据文章中的字数来计算的。它是这样工作的。。。
-如果长度(以文字计)小于7500:作者每字可获得0.08美元的报酬。
-如果长度是7500到8000:作者将获得固定的600美元报酬。
-如果长度是8000到17500:作者每个字的报酬是0.075美元。
-如果长度是17500到19000:作者将获得固定的1313美元报酬。
-如果长度超过19000:作者每字可获得0.08美元的报酬。
此外:作者有三个不同的"级别"(A、B和C)。"C"级作者(新作者)将根据上述信息获得报酬。"B"级作者(知名作家)的报酬是C级作者的1.25倍。"A"级作者(摇滚明星)的报酬是C级作者的1.75倍。
数学:基本上,我编写了这个程序,以便它首先计算支付给作者的金额(amtToPay)。然后,它计算(Level)等于什么。然后(TotalPay)是(amtToPay)乘以(Level)。
我的问题:除了它//计算作者等级的部分之外,一切都很好。例如,如果我将作者输入为"A"级,他应该获得C级作者的1.75倍报酬。因此,它应该将(amtToPay)乘以1.75,除了实际操作是将其乘以"1"并忽略".75">
我是编程新手,我知道可能还有很多其他方法可以写这篇文章。但是请尽力帮助我。非常感谢。
Level
是一个整数类型,因此当您将浮点数分配给它时,小数部分会被丢弃。
尝试定义double rateLevel
,然后定义
if (Level == 'C' or Level == 'c')
rateLevel = 1;
else if (Level == 'B' or Level == 'b')
rateLevel = 1.25;
else if (Level == 'A' or Level == 'a')
rateLevel = 1.75;
TotalPay = amtToPay * rateLevel;
正确的方法是根本不使用浮点类型,除了打印输出。实现这一点的方法是将所有内容按10的幂进行缩放,这将从值中删除所有分数分量。在你的代码中,最低有效数字在千位(0.075)。这意味着你需要将所有值乘以1000。这就是你的比例因子。然后,您可以只使用积分类型int
、long
、int64_t
等进行计算。在计算结束时,您可以将结果拆分为整数和分数分量。
像这样:
int TotalPayDollars = TotalPay/1000;
int TotalPayMilliDollars = TotalPay - 1000*TotalPayDollars;
int TotalPayCents = (int)((double)TotalPayMilliDollars/10 + 0.5);
第一行都是整数,所以除以1000会丢弃任何小数部分。
第二行查找原始值和截断值之间的差值。我们将TotalPayDollars
乘以1000,使其再次成为与TotalPay
相同的单位。
在最后一行中,+ 0.5
将四舍五入到最接近的美分。
注意:选择比例因子时,确保整数类型不会溢出非常重要。32位带符号整数只能容纳2^31-1(2147483647)以下的数字。如果您的任何计算都将高于该值,那么您应该使用64位整数类型。
Level
是char
类型,它是积分,您应该创建一个新的变量来专门保存级别提升的数量:
double level_boost;
//logic
Totalpay = amtToPay * level_boost;
PS:在你的逻辑中,你不必使用&&
:
if (numWords < 7500)
amtToPay = numWords * .08;
else if (numWords < 8000)
//if the numwords is less than 7500 will be handled by first if
amtToPay = 600;
- 编译 Cilk Plus 程序时遇到问题
- 为什么我的程序在打开网络设备时遇到问题
- 我已经安装了用于c++编程的升华3,但在编写了一个简单的程序后,我遇到了以下错误
- Atmel Studio 7:ASF 库提供的 USART 中断处理程序仅在 main() 中遇到无限循环时工作一次?
- 我在C++程序中声明变量时遇到问题
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- 调试C++程序时遇到问题
- C 在程序中遇到了怪异的崩溃
- 为什么我会在试图计算字符串字母的程序中遇到此错误
- 在程序中获取 Linux 'dd' 命令的输出时遇到问题C++
- 调用 ReadFile 程序后,在 debug_heap.cpp 中遇到断点
- 我在这个程序上遇到了麻烦.只有1个编译错误
- 我的程序在尝试将数据集追加到类对象时遇到"Process returned -1073741819 (0xC0000005)"
- C++处理文件,在制作程序时遇到麻烦
- 我在程序中遇到堆栈溢出异常C++
- 对于一个似乎应该"just work."的程序,我遇到了一个奇怪的错误
- 在使用小数的简单c++程序中遇到问题
- 当程序遇到故障时,如何在信号处理函数中写入日志和上传日志到MYSQL
- c++ 从文件中读取双倍,但如果程序遇到字符串,则记录
- 为什么我的程序遇到大值而不是小值的程序崩溃