Какой тип данных возвращает функция Format?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Какой тип данных возвращает функция Format?

Сообщение Dimon111 » 06.02.2008 (Ср) 10:33

В описании написано:

Возвращаемое значение: Возвращает значение типа Variant (String).

Что это означает? Могу ли я присвоить это значение переменной типа Single?

Т. е. будет ли это правильно?

Спасибо.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.02.2008 (Ср) 10:50

Format возвращает Variant в который запакован String. Format$ возвращает String. Присвоить результат функции Format/Format$ переменной типа Single конечно можно, только вот зачем????? Сдется мне, что автор хочет чего-то странного.
Весь мир матрица, а мы в нем потоки байтов!

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 06.02.2008 (Ср) 11:50

Просто автор в этом деле новичок.

Спрошу иначе. Будет ли правильно это:

Dim DAC As Single, SHVolt As Single
SHVolt = Format(DAC, "#00000")

Будут ли правильными сравнения:
If DAC = 40001! ...

И наконец, возможна ли передача данных в Excel, чтобы потом построить график по этим данным?

Спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.02.2008 (Ср) 12:10

Автор не знает, что помимо "=" есть ">" и ">="?
Lasciate ogni speranza, voi ch'entrate.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 06.02.2008 (Ср) 12:36

alibek писал(а):Автор не знает, что помимо "=" есть ">" и ">="?


Пошел изучать...

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 06.02.2008 (Ср) 12:55

Ну если уж совсем быть точным, то интересует вопрос:


Если массив объявлен как Single:
BufferIZM() As Single

, а функция возвращает значение типа String:
Function SHVolt(DAC As Single, Pole As Byte, Point As Byte) As String
SHVolt = Format((DAC / 10), "#0.0")
End Function

То правильно ли будет присвоение:
BufferIZM(J) = CSng(T)

Или можно обойтись в этом случае без CSng()??

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.02.2008 (Ср) 13:49

То правильно ли будет присвоение:
BufferIZM(J) = CSng(T)
Хз. Хз, что такое T и откуда оно берется. Если T = SHVolt(x, y, z), то хз зачем это вообще нужно. Самое правильное BufferIZM(J) = DAC / 10.
Лучший способ понять что-то самому — объяснить это другому.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 06.02.2008 (Ср) 14:44

Забыл указать

Код: Выделить всё
T = SHVolt(x, y, z)



Функция SHVolt(x, y, z) несколько сложнее.
Код: Выделить всё
Function SHVolt(DAC As Single, Pole As Byte, Point As Byte) As String
If Pole > 127 Then DAC = DAC * (-1)
If Point = 0 Then SHVolt = Format(DAC, "#00000")
If Point = 1 Then SHVolt = Format((DAC / 10), "#0.0")
If Point = 2 Then SHVolt = Format((DAC / 100), "#0.00")
If Point = 4 Then SHVolt = Format((DAC / 1000), "#0.000")
If Point = 8 Then SHVolt = Format((DAC / 10000), "#0.0000")
End Function 




Она

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.02.2008 (Ср) 16:16

Dimon111 писал(а):Функция SHVolt(x, y, z) несколько сложнее.
Код: Выделить всё
Function SHVolt(DAC As Single, Pole As Byte, Point As Byte) As String
If Pole > 127 Then DAC = DAC * (-1)
If Point = 0 Then SHVolt = Format(DAC, "#00000")
If Point = 1 Then SHVolt = Format((DAC / 10), "#0.0")
If Point = 2 Then SHVolt = Format((DAC / 100), "#0.00")
If Point = 4 Then SHVolt = Format((DAC / 1000), "#0.000")
If Point = 8 Then SHVolt = Format((DAC / 10000), "#0.0000")
End Function 

А почему бы данной функции сразу не мучаясь преобразованием туда-сюда-обратно не возвращать Single? Типа так:
Код: Выделить всё
Function SHVolt(DAC As Single, Pole As Byte, Point As Byte) As  Single
If Pole > 127 Then DAC = DAC * (-1)
If Point = 0 Then SHVolt = DAC
If Point = 1 Then SHVolt = DAC / 10
If Point = 2 Then SHVolt = DAC / 100
If Point = 4 Then SHVolt = DAC / 1000
If Point = 8 Then SHVolt = DAC / 10000
End Function

Или она должна и строку в каких то случаях возвращать.

З.Ы. Вместо толпы If в данном разе лучше всего подходит Select Case
Весь мир матрица, а мы в нем потоки байтов!

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 06.02.2008 (Ср) 16:53

Смысл - в формате вывода.
Т.е. значение например 3.5 в Single может быть только таким.

Мне же надо в зависимости от Point нарисовать справа незначащие (!) нули. Для облегчения восприятия быстро меняющийся информации.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.02.2008 (Ср) 17:21

DAC = DAC * (-1)
Индийский код? Чем DAC = -DAC хуже?
If Point = 0
If Point = 1
If Point = 2
If Point = 4
If Point = 8
Если это значения степеней двойки, то алгебра рулит:
Код: Выделить всё
Function SHVolt(DAC As Single, Pole As Byte, Point As Byte) As Single
    If Pole > 127 Then DAC = -DAC
    If Point Then
        SHVolt = DAC / (10 ^ (Log(Point) / Log(2) + 1))
    Else
        SHVolt = DAC
    End If
End Function
Мне же надо в зависимости от Point нарисовать справа незначащие (!) нули.
Нули нужно добавлять в том месте, где значение выводится на экран, а не где рассчитывается.
Последний раз редактировалось Antonariy 06.02.2008 (Ср) 17:25, всего редактировалось 2 раз(а).
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.02.2008 (Ср) 17:22

А ты понимаешь разницу между числом и представлением числа?
Если уж тебе так нужно динамическое представление, то перенеси форматирование в отдельную функцию, а не получение значения.
Lasciate ogni speranza, voi ch'entrate.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 06.02.2008 (Ср) 18:25

ЭТО КРУТО. Да, в VB я влез всего месяц назад. Вначале по необходимости, теперь затянуло. Поэтому прошу строго меня не судить.

Вся проблема в том, что выводить надо в 3 места 3 разных значения. Т. е. функция SHVolt вызывается 3 раза за цикл. А числовые данные нужны один раз для записи в массив одного из трех значений. Я пытался объединить и наверно это неправильно, хотя работает на ура. Теперь меня мучал вопрос - как правильно.

С точки зрения построения лучше скорее всего вычислять эти значения типа String и Single в разных функциях. Так я и сделаю.

Спасибо.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 07.02.2008 (Чт) 10:44

З.Ы. Вместо толпы If в данном разе лучше всего подходит Select Case


Чем If хуже Case ?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 07.02.2008 (Чт) 10:51

Медленнее - раз, избыточные проверки при нахождении правильного значения (напр. при point = 0 остальные if'ы уже не нужны) - два.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

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

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

    TopList