Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5
Думаю не у одного меня была редкая ситуация когда нужно было получить количество десятичных знаков после запятой, а функция Digits() работает только с котировками, и к тому всему ещё и информации по этому поводу нигде нет (по крайней мере на момент написания этого поста ранее её я находил, поэтому хочу показать какое решение нашел я)?
Как оказалось суть банально простая, но всё же имеет один недостаток - эта функция не распознаёт нули если после них нет иных цифр. Например если функции дать число 0,01 она вернёт 2, а если 0,0000 она вернёт 0 (то есть четыре нуля она не видит). Поэтому учитывайте этот недостаток в своих разработках
Код на MQL5 пришлось немного доработать, так как по всей видимости на MQL5 для переменных типа double автоматически присваивается ,0 в конце вне зависимости от того целое число ей присваивается или нет. И по этой причине функция никогда не возвращала 0
Предположим, дадим число 2,4875, функция вернёт 4.
А что дальше с этим делать? Что-то Я не уловил смысл(
Думаю не у одного меня была редкая ситуация когда нужно было получить количество десятичных знаков после запятой, а функция Digits() работает только с котировками, и к тому всему ещё и информации по этому поводу нигде нет (по крайней мере на момент написания этого поста ранее её я находил, поэтому хочу показать какое решение нашел я)?
Как оказалось суть банально простая, но всё же имеет один недостаток - эта функция не распознаёт нули если после них нет иных цифр. Например если функции дать число 0,01 она вернёт 2, а если 0,0000 она вернёт 0 (то есть четыре нуля она не видит). Поэтому учитывайте этот недостаток в своих разработках
Код на MQL4
Код на MQL5
Код на MQL5 пришлось немного доработать, так как по всей видимости на MQL5 для переменных типа double автоматически присваивается ,0 в конце вне зависимости от того целое число ей присваивается или нет. И по этой причине функция никогда не возвращала 0
string string_value = (string)value;
можно дальше не читать :-)
Предположим, дадим число 2,4875, функция вернёт 4.
А что дальше с этим делать? Что-то Я не уловил смысл(
В зависимости от того кому что нужно. Например мне для того чтобы было проще вычислить индекс коррелирования нужны были целые числа
можно дальше не читать :-)
А что для программиста тут не понятно?))
спасибо
тоже хорошее решение
Хорошее решение обычно работает правильно
void OnStart() { double price = 500000000.0001; Print( price, ":", GetDigits( price )); }
Результат: 500000000.0001:8
Cколько цифр после запятой? Неужели 8 ?
Хорошее решение обычно работает правильно
Результат: 500000000.0001:8
Cколько цифр после запятой? Неужели 8 ?
Да, восемь.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Думаю не у одного меня была редкая ситуация когда нужно было получить количество десятичных знаков после запятой, а функция Digits() работает только с котировками, и к тому всему ещё и информации по этому поводу нигде нет (по крайней мере на момент написания этого поста ранее её я не находил, поэтому хочу показать какое решение нашел я)?
Как оказалось суть банально простая, но всё же имеет один недостаток - эта функция не распознаёт нули если после них нет иных цифр. Например если функции дать число 0,01 она вернёт 2, а если 0,0000 она вернёт 0 (то есть четыре нуля она не видит). Поэтому учитывайте этот недостаток в своих разработках
Код на MQL4
Код на MQL5
Код на MQL5 пришлось немного доработать, так как по всей видимости на MQL5 для переменных типа double автоматически присваивается ,0 в конце вне зависимости от того целое число ей присваивается или нет. И по этой причине функция никогда не возвращала 0