Необычное округление: 2,3=3 и 2,6=3 Как написать формулу?

Программирование на Visual Basic for Applications
sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Необычное округление: 2,3=3 и 2,6=3 Как написать формулу?

Сообщение sonata » 20.06.2003 (Пт) 11:55

Необычное округление: 2,3=3 и 2,6=3 Как написать формулу?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.06.2003 (Пт) 11:58

Вот так:



i = (i\1)+1



Или, даже вот так: if i-(i\1)>0 then i = (i\1)+1

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 20.06.2003 (Пт) 12:15

не совсем корректно, а если число -целое, то округлений в большую сторону быть не должно....

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 20.06.2003 (Пт) 12:16

2RayShade твоя функция неправильно округлит например число 5 :)
я бы сделал так:
i = (i+0.49999999999999)\1
Ничто так не ограничивает полёт мысли программиста, как компилятор

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.06.2003 (Пт) 12:20

Твоя то функция точно неправильно округлит ;) Потому что у нее точность ограничена девяткой в периоде. А мой вариант округлит все как надо. Я его поправил. Прочитай внимательно постинг еще раз.

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 20.06.2003 (Пт) 12:20

If (Mode(kkvartal <> 0)) Then
kkvartal = (kkvartal \ 1) + 1
End If

Не срабатывает mode или mod.короче необходимо сравнить наличие/отсутствие дробной части...Как это сделать?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.06.2003 (Пт) 12:22

Кхм! Повторяюсь спциально для тех, у кого не работает Refresh в браузере!

if i-(i\1)>0 then i = (i\1)+1

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 20.06.2003 (Пт) 12:37

:) Хорошей округление, так и хочется спросить: "Покупаем или продаем?"
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 20.06.2003 (Пт) 12:37

RayShadeИзвини за занудство,
такие 2,333=3, а вот такие 2,6667=2,6667, а должно быть также 3....

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 20.06.2003 (Пт) 12:41

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

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.06.2003 (Пт) 12:41

Тогда так: If i - (i \ 1) > 0 Then i = (i \ 1) + 1 Else i = (i \ 1)

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 20.06.2003 (Пт) 12:45

Ну вот, наконец-то можно подвести итог беседе:
Может быть кому пригодится бухгалтерская функция, для определения кол-ва захваченных кварталов за период, например для подписки....есть ли бухгалтера на этом форуме?

Код: Выделить всё
Function kkvartal(date1, date2)
kkvartal = (12 * (Year(date2) - Year(date1)) + Month(date2) - Month(date1) + 1) / 3
If ((kkvartal - (kkvartal \ 1) > 0)) Then
kkvartal = (kkvartal \ 1) + 1
Else
kkvartal = (kkvartal \ 1)
End If

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.06.2003 (Пт) 12:49

Неужели вопрос решился? Я просто поверить не могу... Всего каких то 20 постингов и все окей :lol:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.06.2003 (Сб) 6:28

О боже ж ты мой... Люди, ну sonata же в экселе кодит! Поэтому Application.RoundUp(Number, 0)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 21.06.2003 (Сб) 9:31

Я чувствовала, что есть простое и гениальное решение!!!!
Спасибо!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 6

    TopList