Dodawanie 2ch licb typu double

0

Witam, mam dziwny problem z dodawaniem dwóch liczb typu double:

double price = ... //pobieranie ceny, wyswietlam ja, jest typu double
double tax = ... // pobieram podatek

qDebug() << typeid(price).name(); //wyswietla double
qDebug() << (double)price+(double)price*(tax/100); //ucina czesc dziesietna

No wlasnie, dlaczego tak sie dzieje ze mam wszystkie liczby typu double a on i tak zwraca w ostatnim debugu integera?

Pozdrawiam

0

Dałem (double)100.00. Niestety to nie to.

0
pingwindyktator napisał(a):

http://ideone.com/DmqQvL
he?

Eee to mam jakiegoś zbugowanego C++?

0

Musisz gdzieś mieć inne typy, ponieważ samo wyrażenie jest ok:
http://ideone.com/pjX0lv

Być może masz włączone jakieś optymalizacje w stylu -O666 i kompilator ucina Ci tę część, bo myśli, że nie jest potrzebna :P

0
Patryk27 napisał(a):

Musisz gdzieś mieć inne typy, ponieważ samo wyrażenie jest ok:
http://ideone.com/pjX0lv

Być może masz włączone jakieś optymalizacje w stylu -O666 i kompilator ucina Ci tę część, bo myśli, że nie jest potrzebna :P

Uzywam najnowszego QT. Tu cały kod:

    while(query.next()) {
        auto record = new QMap<QString, QString>();

        double price = query.value(3).toDouble();

        double reduction = query.value(4).toString().toDouble();
        double tax = query.value(8).toDouble();

        //price = price + price*(tax/100.00);
        qDebug() << tax;
        qDebug() << typeid(price).name();
        qDebug() << (double)price+(double)price*((double)tax/(double)100.00);
0

Spróbuj:

qDebug() << qSetRealNumberPrecision(10) << tutaj dopiero to wyrażenie

Ewentualnie wykorzystaj:

qDebug() << QString::number(wyrażenie, 'f', 3);
0
Patryk27 napisał(a):

Spróbuj:

qDebug() << qSetRealNumberPrecision(10) << tutaj dopiero to wyrażenie

Ewentualnie wykorzystaj:

qDebug() << QString::number(wyrażenie, 'f', 3);

Dzieki, Twoj sposob pomogl mi zdebugowac co sie stalo. Okazalo sie ze te ceny sa tak smiesznie dobrane ze po dodaniu podatku wychodzi okragla suma i c++ po prostu je zaokragla

0
  1. Jeżeli dasz: ((double)price*(100+tax))/100 - to na 100% będzie to double.
  2. Brutto liczy się nie od ceny tylko od netto (countprice(100+tax))/100

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