zakres float

0

Potrzebuje jakoś określić precyzje typu float, bo zamiast normalnego wyniku wyświetla się zapis w notacji naukowej.

Mój program wykonuje takie obliczenia, dla przykładu, obliczyłem to sam: '2 * 1024* 1024' = 2097152, a następnie wyświetla tą liczbę, tylko w tym przypadku program źle wyświetla liczbę(bo ta jest raczej największa) bez mnożenia przez 2 czyli przy wyniku 1048576, również wyświetlana jest notacja naukowa.

Sprawdzałem i float może mieć wartość ponad 105 ale na pewno nie więcej niż 106.

 
case bajty:			return m_fRozmiarB;

zmienna m_fRozmiarB, przyjmuje zbyt dużą wartość, próbowałem ją rzutować na int:

 
case bajty:			return static_cast<int>(m_fRozmiarB);

ale wynik jest dalej taki sam, utworzyłem również zmienną typu int i przypisałem jej wartość zmiennej m_fRozmiarB, ale również nie pomogło.

0

Zamias float używa się double. Jak chcesz mieć większą dokładność obliczeń całkowitoliczbowych to użyj long int lub long long int.

0

Problem jest nie we floatcie, tylko w tym jak go wyświetlasz. Jak go wyświetlasz?

0

plik main i funkcja main:

         //pobieramy rozmiar
        float fRozmiar;
        cout << "Podaj rozmiar" << endl;
        cin >> fRozmiar;
 
        //deklarujemy obiekt kalkulatora i przekazujemy rozmiar
        CBajty Kalkulator;
        Kalkulator.UstawRozmiar(fRozmiar, static_cast<SCALE>(chSkala));
 
        // pokazujemy rozmiar we wszystkich skalach
        cout << endl;
        cout << "- bajty: "
                 << Kalkulator.PobierzRozmiar(bajty) << endl
             << "- kilobajty: "
                 << Kalkulator.PobierzRozmiar(kilobajty) << endl
                 << "- megabajty: "
                 << Kalkulator.PobierzRozmiar(megabajty) << endl;
 

Dodatkowy plik z funkcjami:

void CBajty::UstawRozmiar(double fRozmiar, SCALE Skala)
{
        switch (Skala)
        {
        case bajty: m_fRozmiarB = fRozmiar; break;
        case kilobajty: m_fRozmiarB = fRozmiar * 1024; break;
        case megabajty: m_fRozmiarB = fRozmiar * (1024 * 1024); break;
        }
}
 
double CBajty::PobierzRozmiar(SCALE Skala)
{
        switch (Skala)
        {
                case bajty: return m_fRozmiarB;
                case kilobajty: return m_fRozmiarB / 1024;
                case megabajty: return m_fRozmiarB / (1024*1024);
                default: return 0;
        }
} 
 
0

to jak go mam wyświetlać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1