Минуты в часы - PullRequest
       1

Минуты в часы

2 голосов
/ 14 октября 2019

Когда я пишу, например, 7,3 или 7,30, предполагаемый результат равен 7,5, и это нормально работает до 7,49, но когда я достигаю 7,5, добавленная десятичная часть как-то становится отрицательной, а результат становится еще меньшечувство, которое 7,16666666666667

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    With Target
        .Value = CInt(.Value) + ((.Value - CInt(.Value)) / 0.6)
    End With
    Application.EnableEvents = True
End Sub

Что происходит ...

1 Ответ

3 голосов
/ 14 октября 2019

Когда дробная часть выражения точно равна .5, CInt всегда округляет ее до ближайшего четного числа. Например, 0,5 раунда до 0 и 1,5 раунда до 2.

https://www.oreilly.com/library/view/vb-net-language/0596000928/re40.html

Используйте Int () вместо CInt ():

.Value = Int(.Value) + ((.Value - Int(.Value)) / 0.6)

Иливозможно исправить ():

.Value = Fix(.Value) + ((.Value - Fix(.Value)) / 0.6)

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/int-fix-functions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...