zmiana ceny przy Princie

O jezykach programowania w platformach i nie tylko.
wojnowy
Stały bywalec
Stały bywalec
Posty: 63
Rejestracja: 24 wrz 2010, 10:09

zmiana ceny przy Princie

Nieprzeczytany post autor: wojnowy »

Hey,
przypadkowo natknąłem się na taką dziwną rzecz:
Gdy zrobimy sobie w kodzie podgląd na cenę typu:

Kod: Zaznacz cały

Comment("O[0] = ", Open[0], " O[10] = ", Open[10]," O[100] = ",Open[100]);
//lub
Print("O[0] = ", Open[0], " O[10] = ", Open[10]," O[100] = ",Open[100]);
to prawdopodobnie wszystko będzie ok.

Problem się zaczyna, gdy zrobimy coś takiego:

Kod: Zaznacz cały

for(i=0;i<100;i++)
     Print("Open["+i+"]= "+Open[i]);

//lub zwyczajnie w ten sposób: 

Print("Open[0]= "+ Open[0]);
Print("Open[1]= "+ Open[1]);
Print("Open[2]= "+ Open[2]);
Print("Open[3]= "+ Open[3]); //(czyli jedna wartość pod drugą)
Wówczas cena jest wyświetlana z dokładnością do 8 miejsc po przecinku z czego tylko 3 ostatnie są zerami. Tzn. że nasza cena jest nieco inna od wyświetlanej w ten poprzedni sposób, gdyż z dokładnością do 5 miejsc po przecinku!!! Dlatego np. zamiast ceny typu: 1,4400 mam 1,43998000 lub zamiast 1,4408 jest 1,44075000
Czy to normalne?!? Czym to może być spowodowane? Dużej różnicy mi to nie robi - różnice to kwestia zaokrągleń, no ale sorry... tak nie powinno być!

Nie jestem jakimś Jedi w programowaniu ale z tego co wiem sposób wyświetlania/printowania zmiennych nie powinien mieć większego znaczenia na ich wartość, która powinna być sztywna! W końcu to cena historyczna, a nie obliczana na bieżąco jakimś algorytmem...

Aha, i mój problem został sprawdzony na platformie XTB, która wyświetla cenę z dokładnością do 4 miejsc po przecinku a nie jak niektórzy brokerzy do 5 miejsca.
Pozdrawiam i dzięki z góry za odpowiedzi.
(\(^.^)/)

crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Re: zmiana ceny przy Princie

Nieprzeczytany post autor: crn »

Moge sie mylic ale piszac w ten sposob:

Kod: Zaznacz cały

Print("Open[0]= "+ Open[0]); 
konwerujesz double ( Open[0] ) na stringa i MT4 tego nie zaokragla.

Jezeli zrobisz tak:

Kod: Zaznacz cały

Print("Open[0]= ", Open[0]); 
cena bezdzie zaokraglona.

wojnowy
Stały bywalec
Stały bywalec
Posty: 63
Rejestracja: 24 wrz 2010, 10:09

Nieprzeczytany post autor: wojnowy »

Powiem szczerze, że nie wierzyłem że to może być przez to... Szczególnie, że cena powinna być zapisana z dokładnością do 4 miejsc po przecinku więc zaokrąglenie nie powinno mieć tu nic do rzeczy.
Z drugiej strony po zamianie operatora "+" na "," jednak printuje się poprawna! więc coś w tym jest :].
Plusik dla Ciebie :P
dzięki i pozdrawiam
(\(^.^)/)

ODPOWIEDZ