Особенности сравнения вещественных чисел

Номер статьи: KB000019

Общие сведения

Связанные блоки:

Описание

Из-за особенностей внутреннего представления вещественных чисел, их сравнение с помощью оператора «=» некорректно.

Вещественные числа могут немного отличаться друг от друга, в зависимости от способа их получения. Например:

Math.Round(12.122) = 12.120000000000001
Math.RoundUp(12.1192) = 12.119999999999999
Math.RoundDown(12.1212) = 12.120000000000001

Следовательно, результат операции сравнения Math.RoundUp(12.1192) = Math.RoundDown(12.1212) будет отрицательным.

Сравнивать вещественные числа нужно с заданной допустимой погрешностью:

Math.Abs(Double1-Double2)<0.00...01

См. также:

База знаний разработчиков