How to make 1.123456 , 1.123?



  • Should i use fromleft(5), or there is a better solution?
    I quess this is a a C++ question and not a qt one..

    [Moderator's note: Moved to C++ Gurus forum -- mlong]



  • float b = 1.123456
    int a = b * 1000 // a = 1123

    And after that you'd better work with integers. If you then write something like

    b = float(a) / 1000

    you will get b ~ 1.1230000045 (or even 1.122999999) because it is impossible to represent decimals as binaries exactly



  • Since you didn't say if your trying to get a string or just round the floating point number, I'm going to assume you want to get a string.

    float fl = 1.1234;
    printf("%.3f", fl); // only uses the first 3 numbers after the decimal
    this prints to console

    use to make a cstr of it
    sprintf(cstr destination, cstr to be formatted, args...);



  • Instead of printf or sprintf, why not just use QString to do the work for you? QString offers plenty of ways to do this:

    • QString::fromNum
    • QString::number
    • Using QString::arg
    • QString::sprintf

    No need to go messing with using raw cstr* for these.



  • My wrong not saying what exactly i want.. here the comment and tell me if you think my solution is bad...

    @float number= 3.333333 // here it could be 1/ 1.3333333/ 1.33 .. What i want is always to show 5 numbers.. so 1->1.000 / 1.3333333->1.333 / 1.33->1.330

    QString mpu=QString::number(number);

    if(mpu.count()==1)
    mpu=mpu+".000";
    else if(mpu.count()==3)
    mpu=mpu+"00";
    else if(mpu.count()==4)
    mpu=mpu+"0";

    ui->lcdNumber->display(mpu.left(5));@



  • You need to chop your string if its length exceeds 5 symbols and add trailing zeroes if it doesn't. I would do it with a cycle (suggesting the string has a decimal point)

    @mpu = mpu.left(5);
    for (int i = mpu.size(); i < 5; i++)
    mpu.append("0");@



  • do you always want the string to have 5 characters or do you want to always have 3 chars after the comma? Just asking because 123456.56789 with your code would become 12345.



  • the number is noway to be bigger than 9.99999

    so i want always from it to have 5 characters..



  • And do you need to round the last digit, or just cut it off?



  • cut it off.. as said

    @float number= 3.333333 // here it could be 1/ 1.3333333/ 1.33 .. What i want is always to show 5 characters.. so 1->1.000 / 1.3333333->1.333 / 1.33->1.330@


  • Moderators

    Why not just use
    @
    QString::number(value,'f',5);
    @
    to force 5 decimal places?



  • Hello.
    Just use
    @
    QString str = QString::number(/your number to show/,'g',5);

    while (str .length() < 5) {
    str .append('0');
    }

    ui->lcdNumber->display(str);
    @



  • AFAIK trailing zeros will be cut off
    [quote author="mlong" date="1348759875"]Why not just use
    @
    QString::number(value,'f',5);
    @
    to force 5 decimal places?
    [/quote]
    Edit: my fault, it won't.



  • [quote author="mlong" date="1348759875"]Why not just use
    @
    QString::number(value,'f',5);
    @
    to force 5 decimal places?
    [/quote]

    i said 3 decimal places.. so 5->3 will do exactly what i want.. thank you a lot! i really need to read my C++ book but i don't have time cause of my studies.. next year :)


  • Moderators

    Leon: So you plan to nag us here for one more year because you have no time to learn something due to studies? I am not sure that is what is intended with this whole university-thing:-)



  • Or you can use ansi/iso c++ (so called: manipulators) too:
    @
    cout.precision(4) ;
    cout.width(10);
    cout << 10.12345 << "\n"; // displays 10.12
    cout.fill('*');
    cout.width(10);
    cout << 10.12345 << "\n"; // displays *****10.12
    @
    and so on...


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.