Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как округлить число 
:(
    Опции темы
Guest
Дата 18.4.2005, 21:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Dim X As Single
X = Val(487.50 * 15 * 0.07) / 100
Y = Round(X, 2)

Значение X будет равно 5.11875 а Y=5.11
то есть после точки остается 2 знака (так нужно) но число не округляется
как сделать чтобы значение Y округлялось, то есть в данном случае равнялось не 5.11 а 5.12 (по законам математики)
  Вверх
Staruha
Дата 18.4.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 2
Всего: 27



Попробуй As Double


--------------------
Возмездие настигнет
PM MAIL   Вверх
Guest
Дата 18.4.2005, 21:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а если точно
  Вверх
Staruha
Дата 18.4.2005, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 2
Всего: 27



Вот пример.Там вообще как вариант переменные объявлены
Dim A,retval
A=123.456789
retval=Round(A) 'возвращается 123
retval=Round(A,3) 'возвращается 123.457

Это сообщение отредактировал(а) Старуха - 18.4.2005, 22:01


--------------------
Возмездие настигнет
PM MAIL   Вверх
Guest
Дата 19.4.2005, 07:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











retval=Round(A,3) 'возвращается 123.457

мне нужно что бы число округлялось до СОТЫХ
то есть в данном варианте результат был 123,46
третий знак после запятой больше 5 значит второй знак на 1 больше, а 3-й знак отсекается.

програмка будет считать деньги. Простое отсечение знаков после запятой влечет потерю в некоторых расчетах (там гда 3-й знак после запятой от 5до 9 ) - 1 копейки.
Мне же нужна точность.

Как это сделать?


  Вверх
Akina
Дата 19.4.2005, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Guest @ 19.4.2005, 08:01)
програмка будет считать деньги. Простое отсечение знаков после запятой влечет потерю в некоторых расчетах (там гда 3-й знак после запятой от 5до 9 ) - 1 копейки.
Мне же нужна точность.

Во бред-то!!!
1) Если тебе нужна точность - коню понятно что никаких округлений не должно быть и в помине! сколько цифр есть - столько за собой и тащи.
2) Округление соответственно - только при выводе окончательного результата.
3) Если считаешь деньги - округлять надо по бухгалтерским правилам, а не к ближайшему целому.

и зарегистрился бы...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Voldemar2004
Дата 19.4.2005, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Код

Private Sub Command1_Click()
Dim X As Double

X = 123.457
Z = Format(X, "0.00\0")
Print Z

End Sub


А вообще Akina прав, бред какой-то, если нужна точность, напиши код, который считает в простых дробях (на примере кусочков торта) smile smile smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Black_Star
Дата 19.4.2005, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

Репутация: 4
Всего: 4



Всякого рода Round - ерунда. Стандартный вид округления -
Код

A=int(a+.5)

Ежели округлять до десятых, то A=int(a+.05) и т.д. smile
PM ICQ   Вверх
Guest
Дата 19.4.2005, 17:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Akina
Почему бред? ты же не можеш выдать человеку зарплату 1000,129 рублей ?
Сумма выдачи будет 1000,13 руб
  Вверх
Akina
Дата 19.4.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Guest @ 19.4.2005, 18:44)
Почему бред? ты же не можеш выдать человеку зарплату 1000,129 рублей ? Сумма выдачи будет 1000,13 руб

А если 1000.125? Сумма выдачи будет - сколько? правильно, 1000.12. А если сумма 1000.115? правильно, тоже 1000.12. Вот только ни одна функция округления так не делает (вернее где-то что-то видел, но математическое округление такого не делает никогда).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ArtNeoX
Дата 19.4.2005, 17:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Эх вы?
неужели это так сложно?

вот ответ на загаданную задачку

Private Sub Command1_Click()
Dim X As Double
X = 123.457
X2 = Format(X, "0.00\0")
Text1 = Round(X2, 2)
End Sub

  Вверх
Akina
Дата 19.4.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



ArtNeoX
Ответ неправильный. 0.025 он превращает в 0.03, что по правилам финансового округления недопустимо.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Staruha
Дата 19.4.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 2
Всего: 27



Точность.Кому что надо.Я недавно округляла до 50руб.Я так думаю если заказывают надо заложить условие,если остаток больше 4 и сделать то ,что ты описал выше.А вообще есть бухгалтерские функции.Надо почитать.


--------------------
Возмездие настигнет
PM MAIL   Вверх
Gannibal
Дата 19.4.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: 18
Всего: 17



Цитата
X = Val(487.50 * 15 * 0.07) / 100


в этой строке Val убери ;) и тогда будет тебе 5.12

Это сообщение отредактировал(а) M.E.G.U.S - 19.4.2005, 19:53


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Guest
Дата 19.4.2005, 20:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Akina, не соглашусь с тобой
" 0.025 он превращает в 0.03, что по правилам финансового округления недопустимо."
0.025 - это две с половиной копейки округляется к ближайшему целому то есть 3 копейки

0,024 - округлится к ближайшему целому - 2 копейки.
  Вверх
Gannibal
Дата 19.4.2005, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: 18
Всего: 17



вот функция если поможет в решении вашей задачи

Код

Public Function okruglenie(Number As Variant, NumDigits As Long) As Double
    Dim dblPower As Double
    Dim varTemp As Variant
    Dim intSgn As Integer

If Not IsNumeric(Number) Then
okruglenie = 0
 Exit Function
End If
dblPower = 10 ^ NumDigits
intSgn = Sgn(Number)
Number = Abs(Number)
varTemp = CDec(Number) * dblPower + 0.49 'если поставит 0.5 тогда будет округлять в верх а при етом значении вниз
okruglenie = intSgn * Int(varTemp) / dblPower
End Function


у меня вот что возникло а нельзя просто форматировать с помощью FormatCurrency() ?

вот короче ещё так попробывал сделать

Код

Dim a, b 
a = 0.025 
b = Round(CCur(a), 2)



Это сообщение отредактировал(а) M.E.G.U.S - 19.4.2005, 20:25


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.4644 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.