我正在将一些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中正确舍入到小数位数的最佳方法是什么?
答案 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
之外,您几乎无能为力。