C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Exception, Неверное округление
GoodWin
Отправлено: 24.08.2006, 14:43


Дежурный стрелочник

Группа: Участник
Сообщений: 50



Здраствуйте.
При возникновении Exception происходит то ли неверное округление, то ли неверный перевод числа в строку . Например вместо "10" получаем "9.99999999999999" . Никто не знает как от этого можно избавиться? Понятно что после перезапуска проги все будет ок, но хотелось бы обмануть пользователя ))) и некоторые ошибки визуально пропускать, записывая их в лог.
Заранее благодарен, GoodWin.
Grigoriy
Отправлено: 24.08.2006, 19:53


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (GoodWin @ 24/08/2006, 14:43)
Здраствуйте.
При возникновении Exception происходит то ли неверное округление, то ли неверный перевод числа в строку . Например вместо "10" получаем "9.99999999999999" . Никто не знает как от этого можно избавиться?

Округлять число до каких нибудь стомиллионных долей... wink.gif
GoodWin
Отправлено: 25.08.2006, 12:25


Дежурный стрелочник

Группа: Участник
Сообщений: 50



Ошибка не в числе.

double Val = 10;
String SVal = FloatTostr( Val );

После этого выводим SVal на экран. Видим 9.999999

Если исключительной ситуации не произошло, то все в порядке, выводит 10, в противном случае 9.999999
Gedeon
Отправлено: 25.08.2006, 18:27


Ветеран

Группа: Модератор
Сообщений: 1742



Попробуйте сделать нечто типа
CODE

Val=RoundTo(Val,0);


Math.hpp не меньше ВСВ6
GoodWin
Отправлено: 14.09.2006, 10:31


Дежурный стрелочник

Группа: Участник
Сообщений: 50



Нашел я как это иправить. Может кому пригодится
Необходимо при exceptions вызывать
Set8087CW(0x133f); // Disable all fpu exceptions
Мне помогло.


Вернуться в Вопросы программирования в C++Builder