Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В зависимости от целей, иногда стоит вообще переходить в целые числа. Сильно бережёт нервы :-) Как-то была задача где надо было точно разметить много-много уровней, сначала умуторился с double, а потом перевёл всё в целые пункты с 0 и всё стало легко,просто и без ошибок.
Не надо использовать округление, пока задача этот не требует.
в том то и дело, что задачи бывают разные :-)
Если вы, для округления, используете MathFloor или MathCeil, то необходимо нормализовать исходный результат до нужной точности.
Потому что при вычислении, вместо целого числа, может получиться дробное число, и из-за этого "хвоста" число округляется неправильно, результат получается неправильным.
Например:
Print (DoubleToStr(1156.12/point, 15));
Print (NormalizeDouble(1156.12/point, _Digits));
теперь попробуем округлить с помощью MathFloor
Print (DoubleToStr(MathFloor(1156.12/point), 15));
Print (MathFloor(NormalizeDouble(1156.12/point, _Digits)));
если я нормализую число 1,05 - нормализуется до 1,1 что в принципе функцией MathFloor - вернет не то что мне нужно :-)
Ибо я бы не использовал MathFloor вообще.
Но задача то другая.
Но задача то другая.
почему другая? вы жеж написали вам нужно округлять результат в меньшую сторону - MathFloor именно это и делает
почему другая? вы жеж написали вам нужно округлять результат в меньшую сторону - MathFloor именно это и делает
да!!! но если я сделаю нормализацию, то оно округлит по математике, и MathFloor уже не будет иметь смысл
чуть выше пример с числом 1156.12 это число хранится в памяти как 1156.119999999999891
то есть, если вы, попробуете округлить его вниз по сотым (через конвертацию в целое) , то у вас получится число 1156.11 вместо 1156.12 - это и есть "особенность" из-за которой вы ломали голову.
чуть выше пример с числом 1156.12 это число хранится в памяти как 1156.119999999999891
то есть, если вы, попробуете округлить его вниз по сотым (через конвертацию в целое) , то у вас получится число 1156.11 вместо 1156.12 - это и есть "особенность" из-за которой вы ломали голову.
да :-) Спасибо.