Sqrt метод возвращает 0

Мне нужен метод, который возвращает стандартное отклонение последнего времени доступа в папке. Вот код:

function standardDeviation {
    Param(
        [Parameter(Mandatory=$true)]
        [String]$tPath
    )

    $moy = moyAge $tPath
    $variance = 0
    $nbFiles = 1
    dir | ForEach-Object {
        if (!($_.PsIsContainer)) {
            $nbDays = $_.LastAccessTime
            $nbDays = $nbDays.Days
            $sq = $nbDays - $moy
            $sq = $sq*$sq
            $variance += $sq
            $nbFiles++
        }
    }
    $variance = $variance / $nbFiles
    $variance = [math]::sqrt($variance)
}

Я не знаю почему, но он всегда возвращает 0. Кто-то знает почему? (moyAge работает и возвращает int (количество дней)

1 ответ

Ваша функция на самом деле ничего не возвращает, поэтому любой вызов "вернется" $null, Либо изменить

$variance = [math]::sqrt($variance)

в

[math]::sqrt($variance)

или добавить строку

$variance

или же

return $variance

в конце функции.

Кроме того, как отметил @MathiasRJessen, DateTime объекты не имеют Days имущество. Если вам нужна разница в днях между сегодняшним днем ​​и конкретной датой, вам нужно сначала рассчитать временной интервал:

$nbDays = ((Get-Date).Date - $_.LastAccessTime.Date).Days
Другие вопросы по тегам