Powershell 小数点四舍五入

Tom*_*wis 2 powershell

我正在将一些 Excel 计算转换为 Powershell:

=ROUNDDOWN((250000.00-0)*5.00%/12,6)
Run Code Online (Sandbox Code Playgroud)

这给出了一个值 1041.666666

我已将其转换为 Powershell:

[Math]::Round((250000.00 - 0) * (5.00/100) / 12,6)
Run Code Online (Sandbox Code Playgroud)

但这给出了一个值 1041.666667

问题在于最后一个数字很重要,而且 powershell 没有将小数点四舍五入76. 这会导致问题,因为 Excel 的最终结果是,1461.59但对于 powershell 是1461.42

那么,在 Powershell 中将正确舍入到一定数量的小数位的最佳方法是什么?

Joe*_*oey 5

Math.Round四舍五入到最接近的数字,而不是向下。您必须推出自己的使用版本Floor,例如:

function Get-RoundedDown($d, $digits) {
  $scale = [Math]::Pow(10, $digits)
  [Math]::Truncate($d * $scale) / $scale
}

Get-RoundedDown (250000 * .05 / 12) 6
Run Code Online (Sandbox Code Playgroud)

但是请注意,通常无法保证您看到的数字实际上只有小数点后六位数字,因为我们在这里所做的事情对二进制浮点数并不友好。因此,您很可能会收到一个类似1441.666600000003结果的数字,除了切换到decimal.