Страница: 1 | 2 |
Вопрос: Подскажите пример округления числа
Добавлено: 10.02.07 19:14
Автор вопроса: Stepan
К примеру есть число 24,1553 Хотелось бы его округлить до 24,16. Как это сделать не знаю. Вы подсказали, что есть такая функция: x = Round(x,0). Делал не получается. Немогли бы вы выложить пример на сайт или дать ответ в полном виде. Спасибо
Ответы
Всего ответов: 24
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 10.02.07 19:29
____ Вообще-то, второй параметр — это номер знакоместа после запятой, до которого производится округление. С нулём Вы получите ровно 24.
Номер ответа: 2
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #2
Добавлено: 10.02.07 21:02
x = Round(x,2)
Номер ответа: 3
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #3
Добавлено: 11.02.07 02:15
Спасибо. Все получилось
Номер ответа: 4
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #4
Добавлено: 11.02.07 04:56
Кстати, Есть недостаток в фунцции x = Round(x,2)
А именно: Четные десятки не округляет.
К примеру:
Так работает
47,475 округляет 47,48
Так не работает
47,465 округляет 47,46 а должен 47,47
Подскажите пожалуйста как это можно исправить. Заранее спасибо.
Номер ответа: 5
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #5
Добавлено: 11.02.07 09:32
Хотя я раньше этого не знал, но выглядит так, что так оно и есть... причем, покопавшись в Инете обнаружил, что не только в VBA или VB. Видимо такой подход призван "сгладить" накопление математической погрешности и округляет в "пограничных ситуациях до ближайшего четного", но для строгих финансовых вычислений это может не подойти.
Тогда стоит пользоваться другими способами округления. Например с помощью функции Cint - выделяющей целую часть числа:
Debug.Print CInt(v * 100 + 0.5) / 100
Номер ответа: 6
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #6
Добавлено: 11.02.07 09:50
Это я поторопился... на самом деле CInt - преобразует действительное число в целое, при том "пограничные" ситуации решаются именно по общим правилам округления без исключений. Тогда так:
Debug.Print CInt(v * 100) / 100
Номер ответа: 7
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #7
Добавлено: 11.02.07 15:31
Спасибо за ответ. Попробывал п-р с Debug.Print CInt(v * 100) / 100.
Получается так:
Если взять число 4.545 то получается 4.54
А если ззять такое число 4.5451 то получается 4.55
А как можно без десятичного знака округлить.
Заранее СПАСИБО
Номер ответа: 8
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #8
Добавлено: 11.02.07 15:41
Поторопился. Попробывал п-р с Debug.Print CInt(v * 100 + 0.5) / 100.
Получается. ОГРОМНОЕ СПАСИБО
Номер ответа: 9
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #9
Добавлено: 11.02.07 15:53
Опять поторопился. п-р с Debug.Print CInt(v * 100 + 0.5) / 100 Тогда получается так - если взять 45,463 то округляется 45,47.
Как это можно исправить.
Заранее спасибо.
Номер ответа: 10
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #10
Добавлено: 11.02.07 16:33
Даже странно как-то все это наблюдать... я сам несколько смущен, что не знал об этих свойствах округления..
Решение, мне кажется, через именно выделение целой части (функция Int), о чем я видимо и думал с раньше, поспешно сказав о CInt.
Вот эта комбинация округляет, как мы привыкли:
Без десятичного знака:
Номер ответа: 11
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #11
Добавлено: 11.02.07 16:35
Но это только для положительных чисел. Чтобы округлять отрицательные +0.5 будет вносить систематическую ошибку.
Номер ответа: 12
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #12
Добавлено: 11.02.07 23:11
СПАСИБО ОГРОМНОЕ за помощь.
Жаль что нет функции идеального округления положительного числа вмете с отрицалельным.
Номер ответа: 13
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #13
Добавлено: 11.02.07 23:20
Заметил страную штуку в функции Int
Если взять число 59385,825 то округлит 59385,82
А есль взять число 55,825 то округлит 55,83
Как то страно.
Номер ответа: 14
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #14
Добавлено: 11.02.07 23:51
____ Так попробуйте не int(), а fix().
Номер ответа: 15
Автор ответа:
Stepan
Вопросов: 9
Ответов: 32
Профиль | | #15
Добавлено: 12.02.07 00:22
С ф-ей fix() тоже не получается. Все так же округляет.