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