Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересуют возможности MQL5? Загляни в документацию!
koko_moko
317
koko_moko 2015.04.10 16:47 

нюансы:

не округляя

не умножая на 10 кратные.

 

пример:

есть число 0,0007 - нужно что было 7 

есть 0,77777 - нужно 77777 

 есть ли какая функция ?

Vitalie Postolache
11096
Vitalie Postolache 2015.04.10 17:08  
mario_SC--:

нюансы:

не округляя

не умножая на 10 кратные.

 

пример:

есть число 0,0007 - нужно что было 7 

есть 0,77777 - нужно 77777 

 есть ли какая функция ?

1) Перевести в стринг, вычесть символы "0", ".", "," и оставшееся перевести в интегер.

2) Перевести в стринг, посчитать символы после запятой, умножить исходный дабл на 10^Х, где Х - кол-во символов после запятой.

koko_moko
317
koko_moko 2015.04.10 17:17  
evillive:

1) Перевести в стринг, вычесть символы "0", ".", "," и оставшееся перевести в интегер.

2) Перевести в стринг, посчитать символы после запятой, умножить исходный дабл на 10^Х, где Х - кол-во символов после запятой.

и как их вычесть ? писать километровый цикл ?
Vitalie Postolache
11096
Vitalie Postolache 2015.04.10 18:22  
mario_SC--:
и как их вычесть ? писать километровый цикл ?

Ага ;)

Ну а как же без цикла, строку ведь посимвольно обрабатывать надо. Есть правда один нюанс - надо отслеживать только нули, идущие подряд от запятой, а те нули, что между цифрами оставлять. А то 0,0070422 превратится в 7422, когда должно быть 70422.

Второй вариант удобнее, Б=А*10^(Х-2), где А - исходное число, Х - длина строки.

Vitalie Postolache
11096
Vitalie Postolache 2015.04.10 18:27  
А как быть с даблами больше 1? Или такой вариант не будет втречаться?
koko_moko
317
koko_moko 2015.04.10 18:49  
evillive:
А как быть с даблами больше 1? Или такой вариант не будет втречаться?
не будет больш 1. попробую, когда решу еще один вопрос который вы уже заметили по поводу вычитаний. + еще вопрос, как округлить 1.12345 => 1.1234. ?????
Viktor
228
Viktor 2015.04.10 19:35  

А намудрили, то ...

double val = 1.23456;
if (val > (1.0 - _Point)) val -= floor(val); // убираем целую часть, если число больше 0.99999
int mantiss = val*pow(10, _Digits); // здесь искомое = 23456.

кажется так будет проще?

koko_moko
317
koko_moko 2015.04.10 19:55  
prorab:

А намудрили, то ...

кажется так будет проще?

 

спасибищщще ! рабит как надо 

мне трудно понять что вы написали, и  сам никгда бы не додумался, но работает ))

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий