![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
flamingo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
подскажите пожалуйста как в vb.net поделить числа с плавающей точкой? такой вопрос можно услышать только от новичка; кем я и являюсь)) элементарное выражение 0.1/0.1 считается не правильно. в обычном vb все считается; а тут нет. конечно; я открываю vb.net не для того чтобы это посчитать, для этого есть калькулятор
![]() ![]() |
|||
|
||||
flamingo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
меня вчера переклинило
![]() не сидите ночами за кодами, элементарных вещей не замечаешь на n-ый час ![]() |
|||
|
||||
Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 2 Всего: 15 |
Меня, кстати, тоже интересует подобный вопрос (в VB6 такого точно не было).
Допустим, у нас есть win-форма, на ней кнопка. Добавляем в обработчик клика по кнопке следующий код
Запускаем. Нажимаем на кнопочку. И в заголовке формы видим не 6 (как ожидалось), а 5,99999999999999. Почему так? И как бороться с такой, ИМХО, довольно большой погрешностью? -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 1 Всего: 92 |
Naum, это уже, наверно, много раз обсуждалось.
Но в кратце: тип double (а тем более single) действительно имеет погрешность, появляющуюся при переводе из внутреннего формата в десятичный (тот который мы читаем). Почти как с бесконечными дробями вроде 1/3, которые нельзя точно представить в десятичном виде. Это связано с тем, что в машине существует конечное множество значений допустимых для double на каком-то интервале, а в математике считается, что вещественных чисел бесконечное много на любом интервале. Ну и, наконец, особенно хорошо эта погрешность действительна заметна после вычислений в циклах, так как уже изначально тот 0.1, который ты суммируешь, получает некоторую погрешность при переводе в double и там она накапливается. Из-за всего этого возникает неприятная проблема при сранении чисел с плавающей точкой на равенство. В твоём примере сравнение
по идее уже не сработает. Вывод? 1) Быть аккуратным с плавающей точкой. 2) Если нужны точные вычисления, то использовать тип decimal (вроде в VB6 был подобный тип под названием money или как-то так) -------------------- Да. Именно так. |
|||
|
||||
An124 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.2.2008 Репутация: нет Всего: нет |
А не пробывали For i=0 to 60 или есть какая то проблема с этим?
|
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
При чём тут это?
И вообще, не надо старые темы откапывать. |
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |