Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Double in de problemen

None
3 antwoorden
  • Hoi iedereen,

    Ik heb ik kleine C++ probleempje, nl:
    Ik doe: (let vooral op `double2String(5.1 + 5.1)' )
    KMessageBox::information(this, string2QString(double2String(5.1 + 5.1)));

    Waarna de message box me: 10.1 oplevert :S
    Zonder de `buf = buf * 10' komt er 10.1999999999….99 uit
    Het kan niet aan de messagebox of te int2string en zijn varianten liggen want de gecommentariseerde 'cout' in de functie levert me precies hetzelfde resultaat op.

    Ik hoop dat iemand hier raad mee weet ;)

    Alvast bedankt,
    Barry Faas

    De betreffende functies:
    [code:1:b6ef9acb01]
    string double2String(double input)
    {
    string retval;
    int forwardComma, backwardComma;
    double buf;
    double input2;
    input2 = input;
    forwardComma = (int)input2;
    buf = input - (double)forwardComma;
    buf = buf * 10;
    backwardComma = (int)buf;
    ///// !!! cout << forwardComma << "
    ." << backwardComma << "
    "; !!!! ////
    if(backwardComma != 0)
    retval = int2String(forwardComma) + "." + int2String(backwardComma);
    else
    retval = int2String(forwardComma);
    return retval;
    }

    string int2String(int Value)
    {
    if (Value == 0) return "0";
    int i;
    string Res;
    bool Neg = false;
    if (Value < 0)
    {
    Neg = true;
    Value = -Value;
    }
    while (Value > 0)
    {
    int x = Value % 10;
    Value /= 10;
    Res += int2Hex(x);
    }
    string Res2 = Neg ? "-" : "";
    for (i = Res.size() - 1; i >= 0; i–) Res2 += Res[i];
    return Res2;
    };
    [/code:1:b6ef9acb01]
  • [code:1:652faa14b6]
    string double2String(double input)
    {
    string retval;
    int forwardComma, backwardComma;
    double buf;
    double input2;
    input2 = input;
    forwardComma = (int)input2;
    buf = input - (double)forwardComma;
    buf = buf * 10;
    [b] backwardComma = (int)buf; // je hakt af[/b]
    ///// !!! cout << forwardComma << "
    ." << backwardComma << "
    "; !!!! ////
    if(backwardComma != 0)
    retval = int2String(forwardComma) + "." + int2String(backwardComma);
    else
    retval = int2String(forwardComma);
    return retval;
    }
    [/code:1:652faa14b6]

    Standaard methode om floating point getallen om te gooien naar ints: er een half bij optellen voor de conversie (net als jezelf ook in je hoofd doet).

    Dus:
    [code:1:652faa14b6] backwardComma = (int)(buf+0.5); [/code:1:652faa14b6]
  • [img:ecf0f12dbf]http://phpc1.cjb.net/~barry/dialog.png[/img:ecf0f12dbf]
    Dankjewel voor het snelle antwoord!!! het werkt ;)

    Barry

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.