Целые числа VB — Divide не содержат запятых?

#vba #excel #integer #divide

#vba #excel #целое число #разделить

Вопрос:

Вероятно, это простой способ, но у меня есть макрос Excel vba, в котором я пытаюсь разделить два целых числа, и в итоге получается круглое число, хотя там должна быть запятая. Например, 278 / 101 = 3. Хотя на самом деле это 2,75, а не 3. Почему это так?

Макрос действительно прост, например:

 Dim intFull, intLow , intDivided as Integer
intFull = 278
intLow = 101
intDivided = intFull  intLow
 

Комментарии:

1. можем ли мы увидеть макрос? 🙂

Ответ №1:

Ваши результирующие переменные представляют собой целое число

Если вместо этого вы работаете с удвоениями, вы получите 2,752 и т. Д., Которые Можно округлить с помощью dbDivided = Round(lngFull / lngLow, 2)

[переменные обновлены, чтобы быть более значимыми]

 Sub redone()
    Dim lngFull As Long
    Dim lngLow As Long
    Dim dbDivided As Double
    lngFull = 278
    lngLow = 101
    dbDivided = Round(lngFull / lngLow, 2)
End Sub
 

Комментарии:

1. И это было все! Спасибо! Я должен был догадаться об этом на самом деле.. Что-то подсказывает мне, что это довольно простой Visual Basic 🙂 Спасибо!

2. Dim intFull As Integer, intLow As Integer, dblDivided As Double работает правильно. В отличие, например, от Java (где int/int выдает int результат) Integer/Integer , не всегда выдает Integer результат в VBA — это зависит от типа переменной, которой присваивается результат. Кроме того, Dim intFull, intLow, intDivided As Double дает нам две Variant переменные и одну Double переменную. Наконец, Double переменная с именем int , перед которым добавляется символ, просто приведет к путанице

3. @barrowc. Согласуйте соглашение об именовании и обновили его соответствующим образом, Long является более эффективным, чем Integer . Также обновили варианты, которые, хотя и являются работоспособными, неопрятны, я должен был использовать свой стандартный стиль определения размеров в одной строке. Спасибо за комментарии.

Ответ №2:

Вы уверены, что использовали косую черту, а не обратную косую черту? (Смотрите также: http://zo-d.com/blog/archives/programming/vba-integer-division-and-mod.html )

Комментарии:

1. Хм, я пробовал оба / и now. Когда я использую / , я получаю значение 3. Когда я использую , я получаю значение 2.

2. смотрите выше. Основной проблемой был ваш тип переменной. Второстепенной проблемой была обратная косая черта, которую определил Иоахим. Оба исправлены в моем сообщении

3. 1 для первой публикации в случае отказа от обратной косой черты.