Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Подскажите пример округления числа Добавлено: 10.02.07 19:14  

Автор вопроса:  Stepan
К примеру есть число 24,1553 Хотелось бы его округлить до 24,16. Как это сделать не знаю. Вы подсказали, что есть такая функция: x = Round(x,0). Делал не получается. Немогли бы вы выложить пример на сайт или дать ответ в полном виде. Спасибо

Ответить

  Ответы Всего ответов: 24  

Номер ответа: 1
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.genyaa.nm.ru
 Профиль | | #5
Добавлено: 11.02.07 09:32
Хотя я раньше этого не знал, но выглядит так, что так оно и есть... причем, покопавшись в Инете обнаружил, что не только в VBA или VB. Видимо такой подход призван "сгладить" накопление математической погрешности и округляет в "пограничных ситуациях до ближайшего четного", но для строгих финансовых вычислений это может не подойти.

Тогда стоит пользоваться другими способами округления. Например с помощью функции Cint - выделяющей целую часть числа:

    v = 4.465
    Debug.Print CInt(v * 100 + 0.5) / 100

Ответить

Номер ответа: 6
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #6
Добавлено: 11.02.07 09:50
Cint - выделяющей целую часть числа

Это я поторопился... на самом деле CInt - преобразует действительное число в целое, при том "пограничные" ситуации решаются именно по общим правилам округления без исключений. Тогда так:

    v = 4.545
    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-сайт: www.genyaa.nm.ru
 Профиль | | #10
Добавлено: 11.02.07 16:33
Даже странно как-то все это наблюдать... я сам несколько смущен, что не знал об этих свойствах округления..

Решение, мне кажется, через именно выделение целой части (функция Int), о чем я видимо и думал с раньше, поспешно сказав о CInt.

Вот эта комбинация округляет, как мы привыкли:
        Debug.Print v, Int(v * 100 + 0.5)/100


Без десятичного знака:
        Debug.Print v, Int(v + 0.5)

Ответить

Номер ответа: 11
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #14
Добавлено: 11.02.07 23:51
____ Так попробуйте не int(), а fix().

Ответить

Номер ответа: 15
Автор ответа:
 Stepan



Вопросов: 9
Ответов: 32
 Профиль | | #15 Добавлено: 12.02.07 00:22
С ф-ей fix() тоже не получается. Все так же округляет.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам