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 = 1123And 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 consoleuse 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@
-
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 :)
-
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...