Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос / 16 сообщений из 16, страница 1 из 1
28.06.2010, 14:10
    #36711290
ДаркТМ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
Всем добрый день.
Ударило мне в голову - мол хочу изучить VBA, поставил себе цель, сел изучать, купил книжку итд.
И вот в конце одной из первых глав в книжке такое задание.
авторДля закрепления материала этой и предыдущей глав советуем читателю написать программу, позволяющую определить значения, для которых выполняется условие CInt(x) = Int(x) = Fix (x) = Round (x). переменная x принимает значения -1.8 , -1.25 , 1.27, 1.68

Вот код того, что я сделал
авторSub aaa()
Dim c As Single
Dim x As Single
Dim a As Boolean
x = 1.27
a = CInt(x) = Int(x) And Round(x) = Fix(x) And Round(x) = Int(x)
c = CInt(x)
MsgBox (a)
End Sub

вопрос такой, почему при прогонке программы пошагово и наводе курсора на функции , при расчете переменной "а" - все выдают сообщения типа CInt (x) = 1 итд. Все, кроме функции Round. Расчитывает программа правильно вроде как, но вот этот Раунд меня напрягает. Это нормально или я что то где то накосячил*?
И еще вопрос - в чем отличие функций CInt от функции Int
...
Рейтинг: 0 / 0
28.06.2010, 14:14
    #36711301
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМ

И еще вопрос - в чем отличие функций CInt от функции Int
Int, Fix Functions (Visual Basic)
...
Рейтинг: 0 / 0
28.06.2010, 14:16
    #36711305
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМ,
Порбуйте вот так
Код: plaintext
a = (CInt(x) = Int(x)  = Round(x) = Fix(x))
...
Рейтинг: 0 / 0
28.06.2010, 14:17
    #36711310
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМ
И еще вопрос - в чем отличие функций CInt от функции Int

У вас пытливый ум?
Выполните пошагово
Код: plaintext
1.
Debug.Print Int( 123456789 . 55 )
Debug.Print CInt( 123456789 . 55 )

ДаркТМУдарило мне в голову - мол хочу изучить VBA, поставил себе цель, сел изучать, купил книжку итд.

Это хорошо, но прочтите пожалуйста это и это
...
Рейтинг: 0 / 0
28.06.2010, 14:19
    #36711316
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМВсе, кроме функции Round. Расчитывает программа правильно вроде как, но вот этот Раунд меня напрягает
Среда принимает решения, просчитывать или не просчитывать подсказку, основываясь на одной ей ведомых принципах. Иногда просчитывает даже пользовательские функции. Ничего страшного.
...
Рейтинг: 0 / 0
28.06.2010, 16:06
    #36711588
ДаркТМ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
big-dukeДаркТМ,
Порбуйте вот так
Код: plaintext
a = (CInt(x) = Int(x)  = Round(x) = Fix(x))


Вот так, при значении 1.27 выдается Фолс. Хотя по идее должна выдаваться Тру, ибо при 1.27 все функции округляют до 1.

ЗЫ
Спасибо, разобрался с разницей в функциях округления. Чтобы удостовериться - Cint - в отличии от Int - всегда возвращает нам переменную типа Integer*? Именно поэтому CInt(123456789.55) выдает Overflow*?
...
Рейтинг: 0 / 0
28.06.2010, 16:11
    #36711604
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМСпасибо, разобрался с разницей в функциях округления. Чтобы удостовериться - Cint - в отличии от Int - всегда возвращает нам переменную типа Integer*? Именно поэтому CInt(123456789.55) выдает Overflow*?
Верно.
Фактически - это разные классы функций. Int - округление, CInt - преобразование типа (походу делающее округление), как и CDate, CSng и т.п.
...
Рейтинг: 0 / 0
28.06.2010, 16:14
    #36711614
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМ,

вот еще для понимания
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub b()
Dim x As Double
x =  1 . 27 
Debug.Print "CInt(x)=" & CInt(x) & ";" & TypeName(CInt(x))
Debug.Print "Int(x)=" & Int(x) & ";" & TypeName(Int(x))
Debug.Print "Round(x)=" & Round(x) & ";" & TypeName(Round(x))
Debug.Print "Fix(x)=" & Fix(x) & ";" & TypeName(Fix(x))

End Sub
...
Рейтинг: 0 / 0
28.06.2010, 16:15
    #36711620
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМbig-dukeДаркТМ,
Порбуйте вот так
Код: plaintext
a = (CInt(x) = Int(x)  = Round(x) = Fix(x))


Вот так, при значении 1.27 выдается Фолс. Хотя по идее должна выдаваться Тру, ибо при 1.27 все функции округляют до 1.

Потому что БигДюк впервые на моей памяти перегрелся...

там начнется сравнение 1 с True, а это не одно и то же
...
Рейтинг: 0 / 0
28.06.2010, 16:44
    #36711692
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
'CInt отбрасывает дробную часть любого заданного им числа, возвращая целое число, также выполняет привычное округление числа
...
Рейтинг: 0 / 0
28.06.2010, 16:48
    #36711702
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
Ципихович Эндрю'CInt отбрасывает дробную часть любого заданного им числа, возвращая целое число, также выполняет привычное округление числа
Не вводи человека в заблуждение, не разобравшись в вопросе. CInt именно что округляет, а не отбрасывает дробную часть (это делает Fix)
...
Рейтинг: 0 / 0
28.06.2010, 16:59
    #36711732
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
Shocker.Pro,

'Функции Fix и Int отбрасывают дробную часть любого заданного им числа, возвращая
'целое число. Но, в отличие от функций CInt и CLng, они не выполняют привычного округ-
'ления — например, Int (4.989) возвращает 4, а не 5
'Результаты этих двух функций отличаются только при обработке отрицательных чисел.
'Тогда Int возвращает ближайшее к значению аргумента меньшее целое число, a Fix просто
'отбрасывает дробную часть аргумента.
...
Рейтинг: 0 / 0
28.06.2010, 17:03
    #36711740
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
Ципихович Эндрю'Функции Fix и Int отбрасывают дробную часть любого заданного им числа, возвращая
'целое число. Но, в отличие от функций CInt и CLng, они не выполняют привычного округ-
'ления — например, Int (4.989) возвращает 4, а не 5
'Результаты этих двух функций отличаются только при обработке отрицательных чисел.
'Тогда Int возвращает ближайшее к значению аргумента меньшее целое число, a Fix просто
'отбрасывает дробную часть аргумента.
Вот именно. К CInt это не относится, она не отбрасывает, а округляет дробную часть.
...
Рейтинг: 0 / 0
28.06.2010, 17:17
    #36711767
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
Shocker.Pro, как Вы умеете доходчиво объяснять, Спасибо большое
...
Рейтинг: 0 / 0
28.06.2010, 21:06
    #36712059
ДаркТМ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
Спасибо всем большое!
Вспоминая школьные уроки паскаля, я делаю вывод, что Fix делает тоже самое, что и функция Trunk -)
Еще раз большое спасибо, правда, мне так кажется - это далеко не последний мой запрос о помощи и советах на этом форуме :)
...
Рейтинг: 0 / 0
28.06.2010, 23:32
    #36712188
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос
ДаркТМСпасибо всем большое!
Вспоминая школьные уроки паскаля, я делаю вывод, что Fix делает тоже самое, что и функция Trunk -)
Еще раз большое спасибо, правда, мне так кажется - это далеко не последний мой запрос о помощи и советах на этом форуме :)
Всегда пожалуйста. Приятно, когда человек ХОЧЕТ разобраться.
Только тему топика пишите адекватно, мы ведь просматриваем весь список топиков, приходится либо напрягаться и вспоминать, о чем там речь, либо просто забивать на топик.

Ну или как-то вот так: http://sql.ru/forum/actualthread.aspx?tid=759122
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]