Hello guys,
Print(NormalizeDouble(iClose("GBPUSD",1,1),Digits));
the result was 1.6879
That is because the result was 1.68790
The Print will ignore zeroes at the end
If it had been 1.68000
It would have printed as
1.68
- Don't use NormalizeDouble EVER
string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); }
I think i get the same result with
DoubleToStr(_bid, Digits)
... but its not my goal to show it (I don't need 5 digit string variable, I need 5 digit double variable. I want to make math with it. I tried with the current way, the math works with 4 digits ONLY !
The problem is that I want to make arithmetic operations with double which results must have 5 digits.
So the question is up yet, how to assign the full 5 digit price to a variable and to have the ability to make math operations with it?
Actually what you want to achieve is very simple. You are just thinking it way too hard but it is actually just plain simple.
You either need to do some more homework because it is just logic. Nothing fancy.
OR
https://www.mql5.com/en/job
I think i get the same result with
DoubleToStr(_bid, Digits)
... but its not my goal to show it (I don't need 5 digit string variable, I need 5 digit double variable. I want to make math with it. I tried with the current way, the math works with 4 digits ONLY !
The problem is that I want to make arithmetic operations with double which results must have 5 digits.
So the question is up yet, how to assign the full 5 digit price to a variable and to have the ability to make math operations with it?
If your broker is a 5 Digit Broker then you have 5 digit prices (for most symbols) . . . yes, it is that simple. If you want the result of mathematics to have a max of 5 digits then you can simply round the values to 5 digits, add 0.5 X 10-5 then multiply by 105 then take the integer value using MathFloor() then divide by 105
It a little insane ... but let ask again.
It is 5 Digit Broker as shown above.
On the graph the price is Bid 1.68155 Ask 1.68174.
The double variable for Bid is 1.6815 Ask 1.6817
String variable for Ask is 1.68155 Ask 1.68174
When I decide a little math with double variables, Ask - Bid = 0.0001
As I know double variable allow 16 digits after the point, but shows only 4 digits. You want to tell me that this is not MQL4 bug and I have to write 10 rows code just to work normally with double variables?
It a little insane ... but let ask again.
It is 5 Digit Broker as shown above.
On the graph the price is Bid 1.68155 Ask 1.68174.
The double variable for Bid is 1.6815 Ask 1.6817
String variable for Ask is 1.68155 Ask 1.68174
When I decide a little math with double variables, Ask - Bid = 0.0001
As I know double variable allow 16 digits after the point, but shows only 4 digits. You want to tell me that this is not MQL4 bug and I have to write 10 rows code just to work normally with double variables?
It a little insane ... but let ask again.
It is 5 Digit Broker as shown above.
On the graph the price is Bid 1.68155 Ask 1.68174.
The double variable for Bid is 1.6815 Ask 1.6817
How do you know this ? where are you "seeing" it ? I suspect it is just how you are showing that value so you can see it that is the problem . . . in the old mql4 Print() and Comment() defaulted to just showing 4 digits for numeric values, even though there were many more digits . . . in mql4.5 it seems that Print() & Comment() now shows 5 digits by default, so where are you seeing 4 digits ?
As I know double variable allow 16 digits after the point, but shows only 4 digits. You want to tell me that this is not MQL4 bug and I have to write 10 rows code just to work normally with double variables?
It's not a mql4 bug . . .
Floating point variables can have many more digits than 16, not many float values can be exactly represented due to the way they are stored in memory . . . take a look here: IEEE 754 and here: https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format
Ï put this in a script and ran it on FXPro demo account
Print(NormalizeDouble(iClose("GBPUSD",0,0),Digits)); double bidprice=Bid; double askprice=Ask; Print("Bid is ",bidprice,". Ask is ",askprice);
result
2014.08.15 16:35:14.546 a GBPUSD,H1: 1.66914 2014.08.15 16:35:14.546 a GBPUSD,H1: Bid is 1.66914. Ask is 1.66939
All print with 5 digits
I think that you are doing something in your code to change the value

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello guys,
I have a demo in FXPro and got situation there. I want to receive a quote with 5 digits. Normally this code should work:
Print(NormalizeDouble(iClose("GBPUSD",1,1),Digits));
the result was 1.6879
I decided to check
Print(MarketInfo("GBPUSD",MODE_DIGITS));
The result was 5
Finally I decided to try this code:
Print(DoubleToStr(_bid, Digits));
the result was 1.68795
Please solve this riddle and tell me how to work with 5 digits double variable ?!