저는 두 번의 반올림 된 값을 빼는 것이 왜 비 둥근 값을 갖게되는지 알아 내려고 애 쓰고 있습니다. 2.2 - 1.1 = 1.10000001 인 경우와 같습니다.PowerShell [수학] :: 라운드가 때때로 라운딩되지 않습니까?
내가 PowerShell에서 스크립트의 블록을 가지고 :
이foreach($disk in $disks)
{
$size = $disk.Size
$freespace = $disk.FreeSpace
$percentFree = [Math]::Round(($freespace/$size) * 100)
$sizeGB = [Math]::Round($size/1073741824, 2)
$freeSpaceGB = [Math]::Round($freespace/1073741824, 2)
$usedSpaceGB = $sizeGB - $freeSpaceGB
#view the variable values in every iteration
Write-Debug "`$size = $size"
Write-Debug "`$freespace = $freespace"
Write-Debug "`$percentFree = $percentFree%"
Write-Debug "`$sizeGB = $sizeGB"
Write-Debug "`$freeSpaceGB = $freeSpaceGB"
Write-Debug "`$usedSpaceGB = $usedSpaceGB"
}
골치 아픈 부분은 다음과 같습니다
$usedSpaceGB = $sizeGB - $freeSpaceGB
에서 [수학] :: 라운드() 메소드가 의도 한대로 때문에, 작동하는 것 같다 $ sizeGB 및 $ freeSpaceGB 변수에 저장된 값이 반올림됨을 알 수 있습니다. 여기에 몇 가지 디버그 출력 예는 다음과 같습니다 어떤 경우에는 당신이 예를 들어, 이미지에 비 둥근 값이 개 이전에 반올림 값 결과의 뺄셈 볼 수 왜 이해가 안
- .
- 이 동작은 루프의 동일한 정확한 위치에서 발생하며 7, 10 및 18 반복에서 말합니다.
테이블이 값은 반올림하지에 이상한 보이는, 그래서 내가 HTML 파일로 데이터를 내보낼 수 :
을 마우스 오른쪽 단추로 지금은 "고정"도 감산 결과이 반올림에 의해하지만 난 ' 왜 이런 일이 일어 났는지 궁금합니다. 누군가가 내가 무슨 일이 일어나고 있는지 이해할 수 있기를 바랍니다. 좋아이의이 대답은이를 해보자
'$ disks'는 ['Win32_LogicalDisk'] (https://msdn.microsoft.com/library/aa394173.aspx) 인스턴스의 모음이라고 가정합니까? 그렇다면'FreeSpace'와'Size'는 정수형 (둘 다'UInt64')이지만 [Math.Round'] (https://msdn.microsoft.com/library/system.math.round)에 전달합니다. .aspx) 당신은'Double' back을 얻고있다. 그리고 나서 [부동 소수점 숫자가 정확히 어떤 숫자를 나타낼 수 없다는] 일반적인 문제를 겪는다. (https://stackoverflow.com/questions/1089018/why- cant-decimal-numbers-be-exactly-in-binary)로 표시됩니다. 중간 값이 아닌 최종 출력 만 반올림합니다. – BACON