Общие вопросы по разработке > Как округлить число в индикаторе

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Владимир
Сообщения: 84
Зарегистрирован: 14 ноя 2016, 02:17
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Как округлить число в индикаторе

Непрочитанное сообщение Владимир » 22 янв 2017, 23:40

Добрый день! У меня возник вопрос в индикаторе возникла необходимость из числа "double" получить "int".
(заданный период индикатора поделить на два, но ведь заданный период может быть и нечётный?)
Пробовал функции decimal.Round(), MathRound() - их нет в документации, компилятор выдаёт ошибку!!!
Как быть подскажите.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Как округлить число в индикаторе

Непрочитанное сообщение evge » 23 янв 2017, 06:59

Метод Math.Round

а так же

Math.Ceiling
Math.Floor
Math.Truncate

в классе Math

а так же

Явные преобразования типов

Однако если преобразование не может быть выполнено без риска потери данных, для компилятора требуется, чтобы пользователь выполнил явное преобразование, которое называется приведением. Приведение является способом явно указать компилятору, что нужно сделать преобразование, и что известно, что может быть потеря данных. Для выполнения приведения заключите тип, в который производится приведение, в скобки перед преобразуемым значением или переменной. Следующая программа выполняет приведение типа double к типу int. Без приведения эта программа скомпилирована не будет.

Код: Выделить всё

                double x = 1234.7;
                int a;
                // Cast double to int.
                a = (int)x;
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Как округлить число в индикаторе

Непрочитанное сообщение evge » 23 янв 2017, 07:04

Не заглядывая в документацию помню, что про Math есть упоминание в документе "скрипты индикаторов и стратегий".
никогда такого не было и вот опять

Leeuwenhoek
Сообщения: 9
Зарегистрирован: 12 дек 2016, 17:45
Поблагодарили: 3 раза

Re: Как округлить число в индикаторе

Непрочитанное сообщение Leeuwenhoek » 23 янв 2017, 11:37

Деление чисел типа int целочисленное. То есть

Код: Выделить всё

            double d = 7.3;
            int i = (int)d;//i =7
            int j = i / 2;//j = 3

KakTak
Сообщения: 128
Зарегистрирован: 21 мар 2016, 17:55

Re: Как округлить число в индикаторе

Непрочитанное сообщение KakTak » 23 янв 2017, 18:03

там целый список команд с матч

Владимир
Сообщения: 84
Зарегистрирован: 14 ноя 2016, 02:17
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Re: Как округлить число в индикаторе

Непрочитанное сообщение Владимир » 23 янв 2017, 21:59

Спасибо за подсказку! Получилось.

Код: Выделить всё

int i=Math.Round(1.23);
//выдаёт ошибку, поэтому не всё можно использовать

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Как округлить число в индикаторе

Непрочитанное сообщение evge » 24 янв 2017, 07:42

Владимир писал(а):

Код: Выделить всё

int i=Math.Round(1.23);
//выдаёт ошибку, поэтому не всё можно использовать


Math.Round (double) - не изменяет тип (см. в документации возвращаемое значение), а просто округляет значение для данного типа, если на входе double на выходе будет так же double, округленное до нужного числа знаков после запятой (второй параметр в Math.Round).

Нужно явное преобразование

Код: Выделить всё

int i = (int)Math.Round(1.23);
никогда такого не было и вот опять


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей