Showing numbers in decimal not scientific notation
-
Hi all,
In may app I have a double variable:
double d;
When the result of 10^6 goes to that variable, it shows it this way: 1e+06
How to do to make the app show the result in decimal, 1000000? -
@tomy said in Showing numbers in decimal not scientific notation:
it shows it this way
What is "it"? Where do you view the variable? In the debugger? On the standard output? In a text widget? What (if any) function do you use to output the variable?
-
@tomy said in Showing numbers in decimal not scientific notation:
it shows it this way
What is "it"? Where do you view the variable? In the debugger? On the standard output? In a text widget? What (if any) function do you use to output the variable?
@Chris-Kawa
I run it in standard mode (ctrl + R). -
Hi @tomy
I don't know if this is what you want, but if you wanna keep only the decimal part of your double you can cast your double to int, you can do something like this :
(int)(10^6)
-
@Chris-Kawa
I run it in standard mode (ctrl + R).@tomy said in Showing numbers in decimal not scientific notation:
I run it in standard mode (ctrl + R).
That's not what I... ugh, nevermind.
So you say you're using QTextStream. Ok, so you have a code similar to this right?QTextStream foo = ...; double bar = ...; foo << bar;
If that's the case then you can do it in a couple of ways:
Switch the stream serialization mode for floating numbers to fixed notation:QTextStream foo = ...; foo.setRealNumberNotation(QTextStream::FixedNotation); double bar = ...; foo << bar;
or pre-format the number the way you want it and pass the resulting string to the stream:
QTextStream foo = ...; double bar = ...; foo << QString::number(bar, 'f');
-
@tomy said in Showing numbers in decimal not scientific notation:
I run it in standard mode (ctrl + R).
That's not what I... ugh, nevermind.
So you say you're using QTextStream. Ok, so you have a code similar to this right?QTextStream foo = ...; double bar = ...; foo << bar;
If that's the case then you can do it in a couple of ways:
Switch the stream serialization mode for floating numbers to fixed notation:QTextStream foo = ...; foo.setRealNumberNotation(QTextStream::FixedNotation); double bar = ...; foo << bar;
or pre-format the number the way you want it and pass the resulting string to the stream:
QTextStream foo = ...; double bar = ...; foo << QString::number(bar, 'f');
@Chris-Kawa
What is ...ugh?! I want to learn it! :)My code is like this:
QString s; QTextStream (&s) << 12 ; lineEdit -> setText(s); // It outputs 12 s.clear(); QTextStream (&s) << "ABC"; lineEdit -> setText(s); // This time it outputs ABC
-
12
is not adouble
, it's anint
.12.0
is a double and12.0f
is a float.
So anyway, like I said earlier, eitherQString s; QTextStream foo(&s); foo.setRealNumberNotation(QTextStream::FixedNotation); s << 12.0 ; //assuming you still want that double and not int lineEdit -> setText(s);
or
QString s; QTextStream (&s) << QString::number(12.0, 'f'); lineEdit -> setText(s);
but then it's kinda pointless, you can just directly do
lineEdit -> setText(QString::number(12.0, 'f'));
...ugh is the sound you can make when you don't have the energy to explain something, so you just skip it altogether ;)
-
no need to use QTextStream in that case:
lineEdit->setText(lineEdit->locale().toString(1257.147862,'f'));
'f'
prevents scientific notation, see http://doc.qt.io/qt-5/qstring.html#argument-formats -
no need to use QTextStream in that case:
lineEdit->setText(lineEdit->locale().toString(1257.147862,'f'));
'f'
prevents scientific notation, see http://doc.qt.io/qt-5/qstring.html#argument-formats -
12
is not adouble
, it's anint
.12.0
is a double and12.0f
is a float.
So anyway, like I said earlier, eitherQString s; QTextStream foo(&s); foo.setRealNumberNotation(QTextStream::FixedNotation); s << 12.0 ; //assuming you still want that double and not int lineEdit -> setText(s);
or
QString s; QTextStream (&s) << QString::number(12.0, 'f'); lineEdit -> setText(s);
but then it's kinda pointless, you can just directly do
lineEdit -> setText(QString::number(12.0, 'f'));
...ugh is the sound you can make when you don't have the energy to explain something, so you just skip it altogether ;)
@Chris-Kawa said in Showing numbers in decimal not scientific notation:
QString s; QTextStream (&s) << QString::number(12.0, 'f'); lineEdit -> setText(s);
I used it. It's fine for
double
s but when I calculateint
s (e.g.,2+3
) it shows5.000000
!!
We should make it show the precision only when the result is adouble
number not anint
. -
@Chris-Kawa said in Showing numbers in decimal not scientific notation:
QString s; QTextStream (&s) << QString::number(12.0, 'f'); lineEdit -> setText(s);
I used it. It's fine for
double
s but when I calculateint
s (e.g.,2+3
) it shows5.000000
!!
We should make it show the precision only when the result is adouble
number not anint
.@tomy said in Showing numbers in decimal not scientific notation:
I used it. It's fine for doubles but when I calculate ints (e.g., 2+3) it shows 5.000000!!
We should make it show the precision only when the result is a double number not an int.You either calculate a double or an int, can't be both. Anyway, what you probably want is this:
double calculationResult = 12.0; QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult)) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
-
@tomy said in Showing numbers in decimal not scientific notation:
I used it. It's fine for doubles but when I calculate ints (e.g., 2+3) it shows 5.000000!!
We should make it show the precision only when the result is a double number not an int.You either calculate a double or an int, can't be both. Anyway, what you probably want is this:
double calculationResult = 12.0; QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult)) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
You either calculate a double or an int, can't be both.
Anyway, what you probably want is this:How can it be acceptable!? All calculator around the world do calculations on both types. Furthermore, when I write
2.3
+4.6
, it shows:6.900000
!
That is it works fine neither for ints nor for doubles.double calculationResult = 12.0; QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
Ow my God! Isn't there any simpler way?
Please have a look at Windows built-in calculator. See this how simple and nifty shows results.
Do you say that behind that Windows' calculator there would be such a long statement just for showing numbers in decimal mode, if it were written by C++/Qt? -
You either calculate a double or an int, can't be both.
Anyway, what you probably want is this:How can it be acceptable!? All calculator around the world do calculations on both types. Furthermore, when I write
2.3
+4.6
, it shows:6.900000
!
That is it works fine neither for ints nor for doubles.double calculationResult = 12.0; QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
Ow my God! Isn't there any simpler way?
Please have a look at Windows built-in calculator. See this how simple and nifty shows results.
Do you say that behind that Windows' calculator there would be such a long statement just for showing numbers in decimal mode, if it were written by C++/Qt?@tomy said in Showing numbers in decimal not scientific notation:
How can it be acceptable!? All calculator around the world do calculations on both types. Furthermore, when I write 2.3+4.6, it shows: 6.900000!
No they do calculation in the widest possible type they support (here it's double) and then display the result as appropriate. Further reading on implicit type promotions in c++ can be found here
Ow my God! Isn't there any simpler way?
This is a simple
if-else
statement with the notable exception that it compares floating point values as they should be compared.Do you say that behind that Windows' calculator there would be such a long statement just for showing numbers in decimal mode, if it were written by C++/Qt?
Yes, I'm sure of it. It's probably even much longer as windows is actually written in C.
-
I used this:
ss = qFuzzyCompare(expression(), static_cast<qint64>(expression()) ? QString::number(static_cast<qint64>(expression())) : QString::number(expression(), 'f')); result_box -> setText(ss);
ss
is a QString.
expression()
returns anint
ordouble
value.
result_box
is alineEdit
which shows the result of the calculations.I get this error:
C:\Users\ME\Documents\Qt\My_First_Calculator\my_first_calculator.cpp:81: error: no matching function for call to 'qFuzzyCompare(double, QString)'
QString::number(expression(), 'f'));
^ -
I used this:
ss = qFuzzyCompare(expression(), static_cast<qint64>(expression()) ? QString::number(static_cast<qint64>(expression())) : QString::number(expression(), 'f')); result_box -> setText(ss);
ss
is a QString.
expression()
returns anint
ordouble
value.
result_box
is alineEdit
which shows the result of the calculations.I get this error:
C:\Users\ME\Documents\Qt\My_First_Calculator\my_first_calculator.cpp:81: error: no matching function for call to 'qFuzzyCompare(double, QString)'
QString::number(expression(), 'f'));
^@tomy said in Showing numbers in decimal not scientific notation:
expression() returns an int or double value.
I'm pretty sure that functions returns a string, not an
int
, nor adouble
. You need to convert the string to an actual number if you want to use it as such, e.g. see here. -
@tomy said in Showing numbers in decimal not scientific notation:
expression() returns an int or double value.
I'm pretty sure that functions returns a string, not an
int
, nor adouble
. You need to convert the string to an actual number if you want to use it as such, e.g. see here.expression() returns an int or double value.
I'm pretty sure that functions returns a string, not an
int
, nor adouble
.Don't be that sure. :)
I have this method in my code:double My_First_Calculator::expression()
But I think this error is of that
ss
is aQString
. -
You either calculate a double or an int, can't be both.
Anyway, what you probably want is this:How can it be acceptable!? All calculator around the world do calculations on both types. Furthermore, when I write
2.3
+4.6
, it shows:6.900000
!
That is it works fine neither for ints nor for doubles.double calculationResult = 12.0; QString displayValue = qFuzzyCompare(calculationResult, static_cast<qint64>(calculationResult) ? QString::number(static_cast<qint64>(calculationResult)) : QString::number(calculationResult, 'f');
Ow my God! Isn't there any simpler way?
Please have a look at Windows built-in calculator. See this how simple and nifty shows results.
Do you say that behind that Windows' calculator there would be such a long statement just for showing numbers in decimal mode, if it were written by C++/Qt?