Страницы: 1
RSS
Как задать массив типа long в самом макросе?
 
Код
Dim Arr()
Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76)


Как задать массив типа long в самом макросе?
Можно использовать числа типа integer, умножив на 100, а потом поделив на 100, но нет ли другого варианта?

При работе с указанным выше массивом числа округляются в расчетах.
Изменено: tchack - 20.09.2022 21:20:57
 
Код
  Dim a&(1 To 3)
  a(1) = 1: a(2) = 2: a(3) = 3
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
tchack: Как задать массив типа long в самом макросе?
Dim Arr() As Long (то же самое, что a&())
Только Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76) уже нельзя. Эта функция только для вариативных массивов и переменных.
При присвоении в Long-массив Double значений произойдёт БАНКОВСКОЕ округление
tchack
Изменено: Jack Famous - 21.09.2022 10:03:02
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Проверка показала можно так, но только без дробных Arr = Array(1&, 2&, 3&)
 
Цитата
testuser: можно так, но только без дробных Arr = Array(1&, 2&, 3&)
А я утверждаю, что нельзя. У вас будут доказательства?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, ни чего не утверждаю, точнее не опровергаю, просто проверил - показало тип long для Arr(0). Сам массив то вариантный и таким и останется, но значения могут же быть, какими угодно, в т.ч. long, а на сколько это может быть полезно др. вопрос, просто дополнение к теме)
 
testuser, у вас вопрос про массив типа Long — все ответы тоже про него. При чём тут обычный вариативный массив arr()?

P.S.: Лунтик вернулся?…
Изменено: Jack Famous - 21.09.2022 11:31:01
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
Dim Arr()
Dim Summ as Long
'Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76)
Arr = Array(260, 280, 280, 220, 376)

Dim i As Integer
For i = LBound(Arr) To UBound(Arr)
    Summ = Summ + Arr(i)
Next

Debug.Print Summ / 100


т.е. в итоге этот вариант так остался самым оптимальным, т.к. не надо в каждой отдельной строке задавать значение отдельному элементу массива.
Изменено: tchack - 21.09.2022 11:34:20
 
tchack, а при чём тут массив типа Long тогда?
У вас обычный вариативный массив, любым элементом которого может быть что угодно - в том числе и Long.
Изменено: Jack Famous - 21.09.2022 11:35:26
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
а при чём тут массив типа Long тогда?

Массив типа Long нельзя задать через Array, но можно избавиться от необходимости массива типа Long, получив в итоге значение типа Long, а именно 14.16.

При суммировании значений Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76) получается 15.
Изменено: tchack - 21.09.2022 11:46:59
 
Цитата
tchack: Массив типа Long нельзя задать через Array
Напрямую нельзя, но можно в цикле (не медленее)
tchack, вопрос-то в чём? Сформулируйте. Пока что тема похожа на свалку…
Изменено: Jack Famous - 21.09.2022 12:07:04
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
При работе с указанным выше массивом числа округляются в расчетах.
Покажите пример, где округляются
 
Цитата
Jack Famous написал:
Dim Arr() As Long (то же самое, что a&())Только Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76) уже нельзя. Эта функция только для вариативных массивов и переменных.

Уже не в чем.
 
Цитата
testuser написал:
Покажите пример, где округляются

Код
Dim Arr()
Dim Summ as Long
Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76)
 
Dim i As Integer
For i = LBound(Arr) To UBound(Arr)
    Summ = Summ + Arr(i)
Next
 
Debug.Print Summ


Получается 15, а должно 14.16.
 
tchack, Dim Summ as Double
Цитата
tchack: можно избавиться от необходимости массива типа Long, получив в итоге значение типа Long, а именно 14.16
Вы не разбираетесь в типах переменных
Изменено: Jack Famous - 21.09.2022 12:09:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Вы не разбираетесь в  типах переменных …

Мне нужен был результат, я его получил...
 
Цитата
tchack: Мне нужен был результат, я его получил...
ну не удивляйтесь тогда, когда в следующий раз помогающие будут ждать, пока вы сами получите нужный результат…
Успехов!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Получается 15, а должно 14.16.
Хм... а я всегда думал что Long это целые числа. Почти как Integer, только Long. А оказывается то вон оно что...
 
Цитата
tutochkin написал:
а я всегда думал что Long это целые числа.
это новый тип видимо, long floating point  :D
По вопросам из тем форума, личку не читаю.
 
Господа, прошу прощения, но меня переклинило.
Писал об одном (Long), думал о другом (Double).
 
tchack, осторожнее, а то Вас переклинило, а  tutochkin чуть веру не поменял. :D
По вопросам из тем форума, личку не читаю.
 
И чего людей так тянет к кнопке цитирования? Это тяжёлое наследние ВК, Телеграм и прочих сетей? )
Страницы: 1
Наверх