Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Prezentacja liczb zmiennoprzecinkowych w konsoli

Ostatnio zmodyfikowano 2013-11-13 14:06
Autor Wiadomość
mateuszq
Temat założony przez niniejszego użytkownika
[C++] Prezentacja liczb zmiennoprzecinkowych w konsoli
» 2013-11-13 13:04:53
Witam, pisze programik w którym podajesz swoj numer po czym program przelicza wczesniej zdefiniowane wspolrzedne na nowe (dodaje do starych wspolrzednych twoj numer) a nastepnie mnozy kązda wspolrzedna X przez wspolrzedna Y i wyswietla na ekranie.

I teraz mam taki problem. Wspolrzedne skladaja sie z 3-4 cyfr dokladnosc d 2 miejsc po przecinku. Kiedy mnoży wspolrzedne zamiast wyswietlenia normalnego wyniku wyswietla go w taki sposob:

1.16892e + 006
1.5303e+006
1.88656e+006
itd.

Co zrobic zeby wynik byl wyswietlany normalnie? Wydaje mi sie ze wynik miesci sie w typie double, ale moze sie myle?

Poniżej kod:
C/C++
#include<iostream>
#include<cmath>
#include<conio.h>
#include<stdio.h>

using namespace std;

double numer_dziennik;
double Wspolrzedne[ 14 ][ 2 ] = { 1446.97, 800.99, 1446.97, 1049.98, 1488.43, 1259.35, 1435.98, 1412.16, 1445.65, 1638.97, 1289.11, 1772.31, 1087.33, 1843.36, 942.67, 1713.81, 817.04, 1447.08, 795.63, 1153.61, 834.97, 894.66, 1016.41, 744.14, 1235.79, 704.06, 1172.15, 980.23 };

double WykazWspolrzednych( double numer )
{
    int wiersze = 14, kolumny = 2;
    double l = 0;
    for( int i = 0; i < wiersze; i++ )
    {
       
        for( int k = 0; k < kolumny; k++ )
        {
            Wspolrzedne[ i ][ k ] = Wspolrzedne[ i ][ k ] + numer;
            //cout<<Wspolrzedne[i][k]<<endl;
            if( k == 0 )
            {
                cout << "Wspolrzedne X liczby: " << i + 1 << " to:\t " << Wspolrzedne[ i ][ 0 ];
            }
            else
            {
                cout << "\tWspolrzedne Y liczby: " << i + 1 << " to:\t " << Wspolrzedne[ i ][ k ] << endl;
            }
           
        }
    }
}

long double IloczynWsp()
{
    long double wynik11 = 0;
    cout << "\n";
    for( int i = 0; i < 13; i++ )
    {
        wynik11 = Wspolrzedne[ i ][ 0 ] * Wspolrzedne[ i ][ 1 ];
        cout << wynik11 << endl;
    }
    return wynik11;
}

int main()
{
    cout << "Podaj swoj numer: "; cin >> numer_dziennik;
    cout << "************************************\n";
    cout << "WYKAZ WSPOLRZEDNYCH PUNKTOW OSNOWY *" << endl;
    cout << "*****************************************************************************************\n\n";
    WykazWspolrzednych( numer_dziennik );
    cout << "\n*****************************************************************************************";
   
    cout << IloczynWsp();
    getch();
    return 0;
}
P-96179
Monika90
» 2013-11-13 13:11:59
Wypróbuj rózne formaty (std::fixed, std::scientific, std::hexfloat, std::defaultfloat) i różne precyzje (std::setprecision(NNN)), może znajdziesz wśród nich taki, który uznasz za normalny.
P-96181
mateuszq
Temat założony przez niniejszego użytkownika
» 2013-11-13 13:20:23
Może się źle sprecyzowalem chodzi mi o to zeby wyswietlił liczbe normalnie w formie dziesietnęj
P-96182
Monika90
» 2013-11-13 13:25:41
1.88656e+006 - to jest postać dziesiętna
Być może chodzi ci o std::fixed
P-96183
mateuszq
Temat założony przez niniejszego użytkownika
» 2013-11-13 13:50:02
zaraz wypróbuje :)
P-96184
mateuszq
Temat założony przez niniejszego użytkownika
» 2013-11-13 14:01:34
std::fixed pomogło! wielkie dzieki :)
P-96185
Monika90
» 2013-11-13 14:06:05
Sprawdź też std::setprecision z <iomanip>, np. std::setprecision(15) to może być nawet lepsze niż std::fixed.
P-96186
« 1 »
  Strona 1 z 1