Страница: 1 |
Страница: 1 |
Вопрос: СРОЧНО!!! БАГ???VS2003
Добавлено: 06.07.08 14:12
Автор вопроса: х3м
ДОброго времени суток простая арифметика
Dim na, ko As Double
Dim dlina as Double
rast = (ko - na) / dlina
Return rast
при значениях
na=3.6
ko=4.7
dlina=88
rast=-0.012499999999999935
а простые действия на калькуляторе -0.0125
Изза чего такие результаты у VS2003
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
х3м
Вопросов: 9
Ответов: 21
Профиль | | #1
Добавлено: 06.07.08 14:34
Т. е. при этих знач.
na=183.6
ko=184.7
dlina=88
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 06.07.08 14:57
1.1 не может быть точно представлено типом double.
Номер ответа: 3
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #3
Добавлено: 06.07.08 16:14
попробуй вместо Double использовать Decimal, или округляй.
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 06.07.08 16:14
+1
Номер ответа: 5
Автор ответа:
х3м
Вопросов: 9
Ответов: 21
Профиль | | #5
Добавлено: 06.07.08 18:20
как это неможет если мы подставляем 4.7 и 3.6 все спокойно представляется, а если подставляем 84,7-83,6 то получаем цифру чуть большую чем 1.1 кто нибудь объясните мне??? И почему при след. действии я получаю
Round(Abs(-0.0125), 3)=0.012 ведь по правилам округления
должно быть 0.013
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 06.07.08 18:31
http://msdn.microsoft.com/en-us/library/zy06z30k.aspx
Функция Round выполняет банковское округление - если последний знак 5, то выполняется округление к ближайшему четному числу.
Если ты хочешь получать 0.013, то используй другую перегрузку:
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 06.07.08 18:56
По первому вопросу читаем и медитируем:
http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой
Как уже сказали, если нужна абсолютная точность, используй Decimal