Если оператор возвращает не равно 0, когда значение равно 0 - PullRequest
0 голосов
/ 30 мая 2018

У меня есть переменная, Diff как двойной.(значения являются образцами из моей рабочей книги)

Dim Diff As Double
Sheets(Sheet1).Activate
Diff = 4382.98-4117.34-265.64

Значения для вычисления разницы получены из ячеек, отформатированных как числа.Затем я использую Diff в качестве аргумента в операторе if.

If Diff <> 0 Then
    ActiveSheet.Range(A2).Value = 265.64 + Diff
End If

Diff должен равняться 0, но оператор if выполняется так, как если бы условие выполнялось.У меня есть подобные заявления if, у которых нет таких проблем.Нужно ли форматировать мои значения по-другому?

Редактировать: было 43892,98 вместо 4382,98 Редактировать2: 256,64 вместо 265,64

Ответы [ 2 ]

0 голосов
/ 31 мая 2018
  1. Никогда, НИКОГДА, NE-VER сравнивает двойные по эквити! (переменные типа с плавающей запятой)
    Пусть даже только в уме - никогда ...
    И вы все делаете правильно - ваше сравнение "<>" - и вы получили правильный результат.

  2. Валюта имеет тип INTEGER, т.е. переменная без плавающей запятой.

    • значения, превышающие 4 цифры после точки, округляются внутри;
    • Сравнение по справедливости является правильным.
      .
0 голосов
/ 30 мая 2018

Я сохранил Diff As Currency, а не Double, и проблема прояснилась.

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