为什么我的计算在我的程序中搞砸了?

时间:2014-10-30 14:50:30

标签: c++

我不太确定我的代码中的哪个位置导致导致错误计算的问题。当我运行该程序时,会出现以下警告:

  

C4305:'argument':从'double'截断到'float'。

税额(ta)和总费用(tc)似乎有问题,

Current Output:
Cost before Tax: $30.20
Tax Amount: $30.20     
Total Cost: $-107374144.00
ground beef is ex-sponged
Press any key to continue . .


What it **should** be:
Your item name:ground beef
Cost before Tax: $30.20
Tax Amount: $2.64
Total Cost: $32.84
ground beef is ex-sponged

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
#include<string>

using namespace std;

class item
{
public:
    item(char* = " " ,float=0.0,int=0,float=0.0);
    ~item();
    void print();
    void calc(int);
private:
    char name[20];
    int quan;
    float cost, tp, cbt, tax, tc;
};
item::~item()
{
    cout << name << " is ex-sponged"<<endl;
    system("pause");
    }
item::item(char *w,float x, int y, float z)
{
    strcpy(name, w);
    cost = x;
    quan=y;
    tp = z;
    tax=cost*quan;
    tc=cbt+tax;
    cbt = cost*quan;
}
void item::print()
{
    cout << "Your item name:" << name << endl;
    cout << "Cost before Tax: $" << cbt << endl;
    cout << "Tax Amount: $" << tax << endl;
    cout << "Total Cost: $" << tc << endl;
}

void item::calc(int n)
{
    quan += n;
    cbt = cost*quan;
     tax = cbt*tp/100;
     tc = cbt + tax;
}

int main()
{
    item i("ground beef", 7.55, 4, 8.75);
    cout << setprecision(2) << showpoint << fixed;
    i.print();
}

4 个答案:

答案 0 :(得分:7)

在构造函数中,您在初始化之前使用cbt

tc=cbt+tax;
cbt = cost*quan;

未初始化的变量的值基本上是随机的。


无关的建议:

  • 使用std::string代替C风格的字符串(char数组)。

  • 在浮动文字上使用f后缀,为其提供float类型而不是double(从而删除警告):7.55f而不是{{1 },7.55(或0.0f)代替0.f等等。

  • 不要使用浮点格式,而是使用固定精度格式。货币贴现中的舍入误差和不准确性是坏。

  • 在声明中命名参数,它作为自我记录的代码。

  • 通常,最好在构造函数中使用mem-initialiser-lists,而不是分配给构造函数体中的成员。这对于具有非平凡默认构造函数的类类型的成员尤其相关(对于不能默认初始化的成员而言,这是完全必需的)。由于数据成员始终按照课堂内的声明顺序进行初始化,因此您必须对其进行重新排序。

我并不知道定点格式,但是根据其他建议,您的代码将如下所示:

0.0

答案 1 :(得分:3)

您在cbt初始化之前使用tc=cbt+tax; cbt = cost*quan;

{{1}}

交换这两行,至少应该有效。

答案 2 :(得分:1)

首先,您计算tax

tax=cost*quan;

其中cost == x == 7.55和quan == y == 4.所以7.55 * 4是30.2。这是你得到的输出。如果你期望别的东西可以修复你的计算。

第二

tc=cbt+tax;
cbt = cost*quan;

您使用未初始化的tc计算cbt,然后将值分配给cbt。所以你在tc

中得到了垃圾

答案 3 :(得分:0)

警告原因:

默认情况下7.55, 4, 8.75是双打。您应该将它们指定为浮点数:7.55f, 4.0f, 8.75f

错误计算的原因:

见@Angew和@PaulEvans的答案