Для вещественных чисел не бывает целых значений - издержки двоичной записи. Поэтому для числа 7 нет точного представления, а только приблизительное (в данном случае меньшее, чем 7). Если необходимо представить число целым, то приводите к целому типу путем округления:
int intValue = int(MathRound((1.1261 - (1.12 + 0.0033))*10000 / 4));
P. S. Пользуйтесь правильной вставкой кода - кнопка SRC.
после неправильных расчетов программы,засомневался и проверил вот так:
тип переменных дабл
void start(){
}
соответственно результат: получается целое число "за уши" приводится к даблу?
Обратите внимание на сообщения при компиляции вашего тестового кода.
Загляните в Документацию, в Преобразование данных.
При преобразовании чисел в текст, чтобы не было искажений числа за счёт преобразований, применяйте специально предназначенные для этого функции (к выводу инфы через Alert это так же относится):
- для типа double при выводе на печать через Print, Alert, Label и т.д., применяйте Doubletostring.
- для int - Integertostring.
P./S.: NormalizeDouble - для округления числа типа double и предназначен. Но когда выводите такое число на печать, его всё равно дополнительно нужно преобразовать в текст. Через Doubletostring. Инфа об этом есть и в описании к NormalizeDouble в Документации.
P./.S.: Кроме того, обратите внимание на особенности сравнения чисел типа double.
Много полезной инфы можно узнать по поиску на сайте.
Да и тему "Навигатор по форуму и ответы на часто задаваемые вопросы. Настоятельно Рекомендуется к Прочтению!", не просто так закреплённую в верхнем списке форумных тем, не мешает вам прочесть.
Там и о сравнении чисел типа double инфа есть и о SRC при вставке кода.
P./.S.: Кроме того, обратите внимание на особенности сравнения чисел типа double.
Много полезной инфы можно узнать по поиску на сайте.
Да и тему "Навигатор по форуму и ответы на часто задаваемые вопросы. Настоятельно Рекомендуется к Прочтению!", не просто так закреплённую в верхнем списке форумных тем, не мешает вам прочесть.
Там и о сравнении чисел типа double инфа есть и о SRC при вставке кода.
При выводе Алертом или Принтом преобразование все равно выполняется.
Так вот: оно должно выполняться по правилам Дабл Ту Стр и Инт Ту Стр.
Количество цифр в результате должно браться в соответствии с точностью представления исходного типа - чтоб целое выглядело целым.
В приведенном выше примере 6,999999999999784 следует брать 12 десятичных знаков, тогда произойдет округление до 7,000000000000
В правильных языках программирования так и делается.
Вряд ли этично возлагать эту работу на пользователя.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
после неправильных расчетов программы,засомневался и проверил вот так:
тип переменных дабл
void start(){
}
соответственно результат: получается целое число "за уши" приводится к даблу?