Как правильно сравнивать двойники в powershell? - PullRequest
4 голосов
/ 02 марта 2012

Заметили следующее поведение при попытке сравнить две пары.

С учетом следующего базового сценария:

[double]$maxValue = 1.5
[double]$startValue = 1.2
[double]$counter = $startValue

while ($counter -lt $maxValue) {
    Write-Host $counter
    $counter += 0.1
}

Вывод:

1.2
1.3
1.4

Если я изменюоператор while для использования меньше или равен: while ($ counter -le $ maxValue) {

Вывод:

1.2
1.3
1.4

То же самое, что и выше, и, следовательно, отсутствует ожидаемый последнийзначение «1,5» в конце.

Как правильно сравнить два числа в powershell?

1 Ответ

8 голосов
/ 02 марта 2012

Я бы предложил не использовать double для начала.Используйте System.Decimal (который может иметь псевдоним в PowerShell - я не уверен).Похоже, вы заинтересованы в точных десятичных значениях, поэтому используйте соответствующий тип.

Причина, по которой вы не видите 1,5, состоит в том, что ближайший двойной к 0,1 является очень немного больше , чем0,1 ... так что вы на самом деле получаете числа вроде 1.2000000001, 1.3000000002, 1.400000002 - и тогда значение 1.500000003 не меньше или равно 1,5.

См. Мои статьи о двоичномс плавающей запятой и десятичная с плавающей запятой для получения дополнительной информации.

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