PowerShell [Math]::Round sometimes not rounding?

Viewed 3958

I'm having struggle trying to figure out why some times the substraction of two rounded values gives me a non-rounded value. Is like if 2.2 - 1.1 = 1.10000001.

I have this block of a script in 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"
}

The troubling part is:

$usedSpaceGB = $sizeGB - $freeSpaceGB

The [Math]::Round() method seems to work as intended, because I can see the rounded values stored in $sizeGB and $freeSpaceGB variables. Here are some debug output examples:

debug output 1 debug output 2

  1. I don't understand why in some cases the subtraction of two previously rounded values results in a non-rounded value as you can see in example images.
  2. This behavior happens in the same exact positions of the loop, lets say in the 7, 10 and 18 iteration.

I export this data to an HTML file so the table looks odd with this values not rounded:

enter image description here

Right now I "fixed" this by Rounding also the subtraction result but I'm wondering why is this happening. I hope someone can help me to understand what is going on.

1 Answers
Related