Какая бурная тема получилась. С округлением кажется МТ4 работает правильно. Я имел виды, чтобы NormalizeDouble(0.055,2) не округлил число "0.055" до "0.06", а обрезал его до "0.05".
У меня непонятки с этими функциями МКЛ. Я не особо понимаю, зачем цены "1.0015223567" округлять функцией NormalizeDouble, если нужно лишь взять ОБРЕЗАННОЕ число до нужно знака. То есть чтобы NormalizeDouble(1.001526789, 5) дало "1.00152" результат. Не нужно его до "1.00153" округлять. Для этого должна быть функция RoundDouble =)
Такое возможно? Или нужно постоянно округлять и получать не те числа, которые хочешь?
Какая бурная тема получилась. С округлением кажется МТ4 работает правильно. Я имел виды, чтобы NormalizeDouble(0.055,2) не округлил число "0.055" до "0.06", а обрезал его до "0.05".
У меня непонятки с этими функциями МКЛ. Я не особо понимаю, зачем цены "1.0015223567" округлять функцией NormalizeDouble, если нужно лишь взять ОБРЕЗАННОЕ число до нужно знака. То есть чтобы NormalizeDouble(1.001526789, 5) дало "1.00152" результат. Не нужно его до "1.00153" округлять. Для этого должна быть функция RoundDouble =)
Такое возможно? Или нужно постоянно округлять и получать не те числа, которые хочешь?
Ну и для экспериментов:
//+------------------------------------------------------------------+//| NormalizeDouble.mq5 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2015, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property script_show_inputs#property description"Проверка NormalizeDouble"inputdouble value=0.055; // нормализуемое число inputint digits=2; // кол-во знаков после запятой //+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
Print("Число ",value," округлённое с точностью до ",digits," знаков = ",NormalizeDouble(value,digits));
}
//+------------------------------------------------------------------+
Какая бурная тема получилась. С округлением кажется МТ4 работает правильно. Я имел виды, чтобы NormalizeDouble(0.055,2) не округлил число "0.055" до "0.06", а обрезал его до "0.05".
У меня непонятки с этими функциями МКЛ. Я не особо понимаю, зачем цены "1.0015223567" округлять функцией NormalizeDouble, если нужно лишь взять ОБРЕЗАННОЕ число до нужно знака. То есть чтобы NormalizeDouble(1.001526789, 5) дало "1.00152" результат. Не нужно его до "1.00153" округлять. Для этого должна быть функция RoundDouble =)
Такое возможно? Или нужно постоянно округлять и получать не те числа, которые хочешь?
Если надо обрезать - обрезайте, если надо округлять - округляйте. Функция NormalkizeDouble() округляет и это именно то, что надо чаще всего.
С чего взяли, что для округления должно быть RoundDouble(), а не NormalizeDouble(). Вы что ли этот мир создавали? А ничего, что шар катается, а у квадрата четыре угла?
Slawa: Всё от того, что топикстартер не читает документацию по языку и не слушает, что ему говорят
Немного не понятно следующее поведение деление и округление дробей.
Есть 2 уравнения: 0.06-0.02 = 0.03999999999999999 0.06-0.024 = 0.036
Воспользовавшись рекомендованной функцией NormalizeDouble мы получим такие результаты: 0.03999999999999999 = 0.04 0.036 = 0.04
В первом примере действительно нужно получить значение 0.04, но во втором - 0.03 (так считает обычный калькулятор). Использовать NormalizeDouble нужно, потому что дроби возвращаются не полные, но во втором случае функция возвращает не корректные значения, а не использовать ее для первого варианта тоже нельзя.
Немного не понятно следующее поведение деление и округление дробей.
Есть 2 уравнения: 0.06-0.02 = 0.03999999999999999 0.06-0.024 = 0.036
Воспользовавшись рекомендованной функцией NormalizeDouble мы получим такие результаты: 0.03999999999999999 = 0.04 0.036 = 0.04
В первом примере действительно нужно получить значение 0.04, но во втором - 0.03 (так считает обычный калькулятор). Использовать NormalizeDouble нужно, потому что дроби возвращаются не полные, но во втором случае функция возвращает не корректные значения, а не использовать ее для первого варианта тоже нельзя.
Ваш обычный калькулятор считает не правильно, должно быть так:
Извиняюсь но так и не поняла, почему округляя на '2' сразу не возможно получить = 0.06000000
Когда нормализуется только один знак, то там все просто: 0, 1, 2, 3, 4 -> 0, а 5, 6, 7, 8, 9 -> 1
Если нормализуется два знака, то в расчет принимаются двузначные числа: 0 - 49 -> 0, а 50 - 99 -> 1. Ведь если число 1.49 нужно округлить до целых, то неужели должны получить 2, до которого 51-а сотая против имеющихся 49-и сотых расстояния до 1?
Тоже самое с трехзначными, четырехзначными и т. д.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Математика. 6 класс. Учебник. Никольский С.М., Потапов М.К. М.: 2012. - 256 с
Округление.
Какая бурная тема получилась. С округлением кажется МТ4 работает правильно.
Я имел виды, чтобы NormalizeDouble(0.055,2) не округлил число "0.055" до "0.06", а обрезал его до "0.05".
У меня непонятки с этими функциями МКЛ. Я не особо понимаю, зачем цены "1.0015223567" округлять функцией NormalizeDouble, если нужно лишь взять ОБРЕЗАННОЕ число до нужно знака.
То есть чтобы NormalizeDouble(1.001526789, 5) дало "1.00152" результат. Не нужно его до "1.00153" округлять. Для этого должна быть функция RoundDouble =)
Такое возможно? Или нужно постоянно округлять и получать не те числа, которые хочешь?
Вы бы уже определились, что ли. То округляет:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Округление чисел в МТ4 через NormalizeDouble
Roman Starinskij, 2016.01.21 10:03
Здравствуйте. Подскажите, в чем дело.
Почему функция NormalizeDouble(0.055,2) округляет число "0.055" до "0.06"?
Это же не функция огругления дробей.
то не округляет:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Округление чисел в МТ4 через NormalizeDouble
Roman Starinskij, 2016.01.25 14:30
Какая бурная тема получилась. С округлением кажется МТ4 работает правильно.
Я имел виды, чтобы NormalizeDouble(0.055,2) не округлил число "0.055" до "0.06", а обрезал его до "0.05".
У меня непонятки с этими функциями МКЛ. Я не особо понимаю, зачем цены "1.0015223567" округлять функцией NormalizeDouble, если нужно лишь взять ОБРЕЗАННОЕ число до нужно знака.
То есть чтобы NormalizeDouble(1.001526789, 5) дало "1.00152" результат. Не нужно его до "1.00153" округлять. Для этого должна быть функция RoundDouble =)
Такое возможно? Или нужно постоянно округлять и получать не те числа, которые хочешь?
Ну и для экспериментов:
Какая бурная тема получилась. С округлением кажется МТ4 работает правильно.
Я имел виды, чтобы NormalizeDouble(0.055,2) не округлил число "0.055" до "0.06", а обрезал его до "0.05".
У меня непонятки с этими функциями МКЛ. Я не особо понимаю, зачем цены "1.0015223567" округлять функцией NormalizeDouble, если нужно лишь взять ОБРЕЗАННОЕ число до нужно знака.
То есть чтобы NormalizeDouble(1.001526789, 5) дало "1.00152" результат. Не нужно его до "1.00153" округлять. Для этого должна быть функция RoundDouble =)
Такое возможно? Или нужно постоянно округлять и получать не те числа, которые хочешь?
Если надо обрезать - обрезайте, если надо округлять - округляйте. Функция NormalkizeDouble() округляет и это именно то, что надо чаще всего.
С чего взяли, что для округления должно быть RoundDouble(), а не NormalizeDouble(). Вы что ли этот мир создавали? А ничего, что шар катается, а у квадрата четыре угла?
Какая бурная тема получилась.
Всё от того, что топикстартер не читает документацию по языку и не слушает, что ему говорят
Немного не понятно следующее поведение деление и округление дробей.
Есть 2 уравнения:
0.06-0.02 = 0.03999999999999999
0.06-0.024 = 0.036
Воспользовавшись рекомендованной функцией NormalizeDouble мы получим такие результаты:
0.03999999999999999 = 0.04
0.036 = 0.04
В первом примере действительно нужно получить значение 0.04, но во втором - 0.03 (так считает обычный калькулятор).
Использовать NormalizeDouble нужно, потому что дроби возвращаются не полные, но во втором случае функция возвращает не корректные значения, а не использовать ее для первого варианта тоже нельзя.
Немного не понятно следующее поведение деление и округление дробей.
Есть 2 уравнения:
0.06-0.02 = 0.03999999999999999
0.06-0.024 = 0.036
Воспользовавшись рекомендованной функцией NormalizeDouble мы получим такие результаты:
0.03999999999999999 = 0.04
0.036 = 0.04
В первом примере действительно нужно получить значение 0.04, но во втором - 0.03 (так считает обычный калькулятор).
Использовать NormalizeDouble нужно, потому что дроби возвращаются не полные, но во втором случае функция возвращает не корректные значения, а не использовать ее для первого варианта тоже нельзя.
Ваш обычный калькулятор считает не правильно, должно быть так:
Всё от того, что топикстартер не читает документацию по языку и не слушает, что ему говорят
если N+1 знак < 5, то N-ый знак сохраняют, а N+1 и все последующие обнуляют;
если N+1 знак ≥ 5, то N-ый знак увеличивают на единицу, а N+1 и все последующие обнуляют;
Извиняюсь но так и не поняла, почему округляя на '2' сразу не возможно получить = 0.06000000
v1 = 0.06000000, v2 = 0.06000000
v1 = 0.06000000, v2 = 0.05000000
---
Извиняюсь но так и не поняла, почему округляя на '2' сразу не возможно получить = 0.06000000
Извиняюсь но так и не поняла, почему округляя на '2' сразу не возможно получить = 0.06000000
Когда нормализуется только один знак, то там все просто: 0, 1, 2, 3, 4 -> 0, а 5, 6, 7, 8, 9 -> 1
Если нормализуется два знака, то в расчет принимаются двузначные числа: 0 - 49 -> 0, а 50 - 99 -> 1. Ведь если число 1.49 нужно округлить до целых, то неужели должны получить 2, до которого 51-а сотая против имеющихся 49-и сотых расстояния до 1?
Тоже самое с трехзначными, четырехзначными и т. д.