English

## Storing 0.07 as a double - impossible???

 76 Paul_B 2014.09.21 22:36   Is it just me, or can 0.07 not be stored accurately?  Example```double number=0.07; Comment(number);``` This displays as 0.07000000000000001, therefore I can for instance send an order using a lot size of 0.07.
 1211 deysmacro 2014.09.22 02:35 #   Well, you can try ...`Comment(NormalizeDouble(number,2));`
 76 Paul_B 2014.09.22 10:12 #   First thing I tried. Doesn't help at all. I've even wrote my own normalise function that didn't help either. This makes the following command impossible, even though it's perfectly valid`OrderSend(Symbol(),OP_BUY,0.07,Ask,3,0,0,NULL,0,0,CLR_NONE);`
 1211 deysmacro 2014.09.22 10:47 #   ```double number=0.07; OrderSend(Symbol(),OP_BUY,number,Ask,3,0,0,NULL,0,0,CLR_NONE);```It works for me.
 748 honest_knave 2014.09.22 11:27 #   Paul_B: First thing I tried. Doesn't help at all. I've even wrote my own normalise function that didn't help either. This makes the following command impossible, even though it's perfectly valid What is minlot and lotstep for your broker?
 Moderator3514 GumRai 2014.09.22 11:39 #   Paul_B: First thing I tried. Doesn't help at all. I've even wrote my own normalise function that didn't help either. This makes the following command impossible, even though it's perfectly valid `OrderSend(Symbol(),OP_BUY,0.07,Ask,3,0,0,NULL,0,0,CLR_NONE);`The OrderSend will work perfectly fine with the constant 0.07, it is only when it is calculated that there might be a problemie```double a=1.4; double b=2.0; double lotsize =a/b; OrderSend(Symbol(),OP_BUY,lotsize,Ask,3,0,0,NULL,0,0,CLR_NONE);``` May or may not work as intended
13126
WHRoeder 2014.09.22 14:51 #

Paul_B: Is it just me, or can 0.07 not be stored accurately?
1. Correct, it can not be stored accurately - because 1/10 is not a multiple of powers of two. 1/8 can be. See http://en.wikipedia.org/wiki/Single-precision_floating-point_format (Ex 2: Consider a value 0.25)
2.  Do NOT use NormalizeDouble, EVER. For ANY Reason. It's a kludge, don't use it. It's use is always wrong. Wrong as given here:deysmacro: Well, you can try ...`Comment(NormalizeDouble(number,2));`Taking a double, normalizing it to 2 digits, give you a double - same problem - does nothing.
3. `Comment(DoubleToString(number,2));`

1211
deysmacro 2014.09.22 15:34 #

WHRoeder:
1.  Do NOT use NormalizeDouble, EVER. For ANY Reason. It's a kludge, don't use it. It's use is always wrong. Wrong as given here:deysmacro: Well, you can try ...Taking a double, normalizing it to 2 digits, give you a double - same problem - does nothing

It's not like I don't see that coming long before I post it.

 Moderator3206 angevoyageur 2014.09.22 20:02 #   deysmacro: It's not like I don't see that coming long before I post it. Don't worry, NormalizeDouble works perfectly for what is intended.