Powershell舍入小数点后的数字

时间:2018-08-21 13:55:52

标签: powershell

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

=ROUNDDOWN((250000.00-0)*5.00%/12,6)

这给出的值为1041.666666

我已将其转换为Powershell:

[Math]::Round((250000.00 - 0) * (5.00/100) / 12,6)

但这给出的值为1041.666667

问题在于最后一个数字很重要,而且powershell不能将7向下舍入到6。这会带来问题,因为Excel的最终结果是1461.59,而powershell的最终结果是1461.42

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

1 个答案:

答案 0 :(得分:4)

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

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

Get-RoundedDown (250000 * .05 / 12) 6

但是请注意,由于我们在此处所做的操作并不友好,因此通常不能保证您看到的的数字实际上只有小数点后六位对二进制浮点数。因此,很可能您会收到一个类似1441.666600000003的数字,除了切换到decimal之外,您几乎无能为力。