为什么在打印浮动值时会出现字符“e”

时间:2013-11-25 02:17:56

标签: c++ class random struct void

所以,这是我的问题,我的“cene”总是不是一个真实的数字,它总是有一个字符'e'...我不知道我做错了什么。这是我的代码:

#include <iostream> //Vkljucitev knjiznice iostream
#include <string> //Vkljucitev knjiznice string
#include <stdlib.h> //Vkljucitev knjiznice stdlib.h
#include <windows.h> //Vkljucitev knjiznice windows.h

using namespace std; //Uporaba std::

//Razred za datum, kasneje vsiljen
class datum
{
    public:
    int leto;
    int mesec;
    int dan;
};

//Razred za racun
class racun
{
private:
    string naslov; //Rezervacija string, za ime racuna
    float cena[500]; // Skupna cena na računu
    int i; // Števec
public:
    datum izdaje; //datum izdaje za racun
   void nastavi_izracunaj_izpisi() //Podprogram za nastavitev, izracun in izpis racuna
    {
//_______________________________________________________________________________________________________________

        cout<<"Podaj naslov racuna"<<endl;
        getline(cin,naslov);
        cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
        izdaje.dan = rand() % 30 + 1; //Dan
        izdaje.mesec = rand() % 12 + 1; //Mesec
        izdaje.leto = rand() % 30 + 1985; //Leto
        i = rand() % 99 + 1; // Koliko računov smo imeli.
        int produkti; //rezervacija za vse produkte
        produkti = i + rand() % 199 + 1; //Koliko produktov smo imeli
        cout<<"Produkti= "<<produkti<<endl;
        float produkt1[500]; //cena prvega produkta
        float produkt2[500]; //cena drugega produkta
        int a; //števec produktov
        a=0; //ki ga nastavimo na nič
//_________________________________________________________________________________________________________________

//Zanka za pridobitev dveh produktov
        do
            {
                produkt1[a] = rand() % 199 +1;
                produkt2[a] = rand() % 199 +1;
                a=a+1;
            }while(a!=produkti);
//Kateri produkt naj izpise
        int b; //kateri produkt bo izpisalo
        b = rand() % 199 +1;

//____________________________________________________________________________________________________________________

//Zanka za pridobitev cene
        int h;
        h=0;
        do
            {
                cout<<"Cena: "<<cena[h]<<endl;
                cout<<"Produkt1: "<<produkt1[b]<<endl;
                cout<<"Produkt2: "<<produkt2[b]<<endl;
                cout<<"H: "<<h<<endl;
                system("PAUSE");
                cena[h]=produkt1[b] + produkt2[b];
                h=h+1;
            }while(h!= produkti);



//______________________________________________________________________________________________________________________

        //DDV
        float ddv = 1.12797374897; //DDV vrednost
        float cena2; //DDV cene
        float cenaddv; //cena z DDV-jem
        cena2=cena[h]/ddv; //izracun za DDV cene
        cenaddv=cena[h]+cena2; //izracun za ceno z DDV-jem
//________________________________________________________________________________________________________________________

//izpis
        cout<<naslov<<endl<<endl;
        cout<<endl<<"Dan: "<<izdaje.dan<<endl<<"Mesec: "<<izdaje.mesec<<endl<<"Leto: "<<izdaje.leto<<endl;
        cout<<"Produkt1 = "<<produkt1[b]<<"$"<<endl<<"Produkt2 = "<<produkt2[b]<<"$"<<endl;
        cout<<"Kupili ste: "<<produkti<<" produktov"<<endl; //izpis za produkte
        cout<<"Cena brez ddv: "<<cena[h]<<"$"<<endl<<"DDV: "<<cena2<<"$"<<endl<<"Cena z DDV: "<<cenaddv<<"$"<<endl;
    }
};

//Glavni program
int main()
{
    racun nekaj; //Rezervacija objekta
    nekaj.nastavi_izracunaj_izpisi(); //Izpis metode
    system("PAUSE"); //Zamrzni zaslon
    return 0; //Koncaj program
}

有人可以解释我该怎么办吗? 附:该计划在斯洛文尼亚语。

修改
我解决了......而不是这样做:

//Zanka za pridobitev cene
        int h;
        h=0;
        do
            {
                cout<<"Cena: "<<cena[h]<<endl;
                cout<<"Produkt1: "<<produkt1[b]<<endl;
                cout<<"Produkt2: "<<produkt2[b]<<endl;
                cout<<"H: "<<h<<endl;
                system("PAUSE");
                cena[h]=produkt1[b] + produkt2[b];
                h=h+1;
            }while(h!= produkti);

我这样做了:

cena = produkti*(produkt1[b]+produkt2[b]);

1 个答案:

答案 0 :(得分:2)

您已将cena声明为浮点数。您在输出中看到的e(例如1.035e2)是科学记数法的一部分。

如果需要以特定格式输出浮点数,请查找C ++标准标题iostreamiomanip中定义的操作以控制格式。这个页面也可能是一个好的开始:http://en.cppreference.com/w/cpp/io/manip

编辑:另外,看看这个循环:

        do
        {
            cout<<"Cena: "<<cena[h]<<endl;
            cout<<"Produkt1: "<<produkt1[b]<<endl;
            cout<<"Produkt2: "<<produkt2[b]<<endl;
            cout<<"H: "<<h<<endl;
            system("PAUSE");
            cena[h]=produkt1[b] + produkt2[b];
            h=h+1;
        }while(h!= produkti);

看来这是写入cena[]的第一段代码,但在向其写入新值之前会打印cena[h]。因此,首先cout会在将cena[]设置为新值之前写出{{1}}中未初始化的值。

这似乎是不正确的逻辑。您确定要在计算之前打印出该值吗?