Powershell - 数字格式显示错误的结果

时间:2011-12-27 20:30:41

标签: powershell formatting numbers powershell-v2.0

在powershell v2中,我需要将22除以8然后去掉小数点后面的所有小数位(在我的系统上是逗号)。没有四舍五入。

如你所见。 22/8等于 2,75

PS C:\Documents and Settings\Administrator> $(22/8)
2,75

预期结果 2

奇怪的是,当使用不同的方法来计算相同的结果时,我会得到不同的结果。

PS C:\Documents and Settings\Administrator> "{0:N0}" -f $(22/8)
3

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2.75
3

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2,75
2

其他一些例子......

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2.15
2

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2,15
2

原因是什么?

4 个答案:

答案 0 :(得分:3)

要删除小数点后的所有小数位,应使用数学类的truncate方法。

[Math]::Truncate(22/8) # result: 2
[Math]::Truncate(-22/8) # result: -2

这将为正数和负数提供所需的结果。

答案 1 :(得分:1)

Powershell使用逗号(至少在美国英语系统上)作为分隔符。如果您的机器是这种情况,“2,75”将被读作“2”和“75”。格式字符串只关心“2”,因此它忽略了它视为第二个参数的“75”。

2.15回落,2.75回合。

那么,为什么你期望“2.75”向下舍入到“2”?如果那是你真正想要的,那就试试 Math.Floor()方法。

答案 2 :(得分:1)

这对你有用吗?

[math]::Floor(22/8)

结果: 2

答案 3 :(得分:0)

数学方法更受欢迎,但您也可以使用字符串操作:

PS> (22/8).ToString().Split('.')[0]
2