Помогите облагородить код

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

Помогите облагородить код

Сообщение VBChild » 09.11.2022 (Ср) 20:58

Доброго времени!

Подскажите, как подобное безобразие, можно привести к красивому коду? И чтобы не упираться в 100, 91 и 94.

Код: Выделить всё

Private Function GetCountText(ByVal Count As Integer) As String
    Select Case Count
        Case 0, 5 To 20, 25 To 30, 35 To 40, 45 To 50, 55 To 60, 65 To 70, 75 To 80, 85 To 90, 95 To 100
            GetCountText = "штук"
        Case 1, 21, 31, 41, 51, 61, 71, 81, 91
            GetCountText = "штука"
        Case 2 To 4, 22 To 24, 32 To 34, 42 To 44, 52 To 54, 62 To 64, 72 To 74, 82 To 84, 92 To 94
            GetCountText = "штуки"
        Case Else
            GetCountText = "штук"
    End Select
End Function


Я честно погуглил 'VBA сумма прописью', но очень мало оттуда понял. Салага пока.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите облагородить код

Сообщение Хакер » 09.11.2022 (Ср) 21:37

Код: Выделить всё
Private Function GetCountText(ByVal Count As Integer) As String
    Count = Abs(Count)
    If Count > 19 Then Count = Count Mod 10
    Select Case Count
        Case 0, 5 To 19
            GetCountText = "штук"
        Case 1
            GetCountText = "штука"
        Case 2 To 4
            GetCountText = "штуки"
    End Select
End Function


Честно говоря, глядя на тип As Integer, я не понимаю смысла упираться в 32767.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите облагородить код

Сообщение Хакер » 09.11.2022 (Ср) 21:43

VBChild писал(а):но очень мало оттуда понял. Салага пока.

Тогда видимо нужно разъяснение. Подход такой: если число на входе больше, чем 19, то вместо числа берётся остаток от деления первоначального числа на 10.

То есть из числа «пять тысяч сто тридцать семь» делается просто «семь». И тогда в Select Case-блоке нужно предусмотреть только отдельные случаи в пределах 10 возможных вариантов последней цифры, плюс 9 исключений для «надцать».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VBChild
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 29.10.2022 (Сб) 23:20

Re: Помогите облагородить код

Сообщение VBChild » 09.11.2022 (Ср) 22:46

Хакер, принято! На корочку записано. Abs исключу только. У меня сканирование штрих-кодов.
Огромное спасибо!

VBChild
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 29.10.2022 (Сб) 23:20

Re: Помогите облагородить код

Сообщение VBChild » 09.11.2022 (Ср) 23:12

Хакер писал(а):Честно говоря, глядя на тип As Integer, я не понимаю смысла упираться в 32767.


Ну, потому что больше 10, там всё равно не бывает. Это софт для точки продаж.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите облагородить код

Сообщение Хакер » 10.11.2022 (Чт) 9:40

VBChild писал(а):
Хакер писал(а):Честно говоря, глядя на тип As Integer, я не понимаю смысла упираться в 32767.


Ну, потому что больше 10, там всё равно не бывает. Это софт для точки продаж.

Выигрыша от использования Integer толком нет никакого. Только микроскопический вред производительности.

Не вижу смысла исключать Abs. Оно заставляет функцию адекватно реагировать на отрицательные числа (а это может понадобиться при пробивании возвратов на торговой точке), а вреда в плане производительности не наносит, если только функцию не собираются вызывать миллионы раз в секунду.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

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

    TopList