我正在使用Powershell,需要提取小数点前的数字,以便我可以评估提取的数字
使用$Interest_Rate = 15.5
我尝试过以下代码..但它们不起作用:
$Interest_RatePart1 = "{0:N0}" -f $Interest_Rate
它将值四舍五入为16
$Interest_RatePart1 = ($Interest_Rate -split '.')[0].trim()
它返回一个空白。 我只想返回15
答案 0 :(得分:4)
Formatting the number will cause rounding away from zero
使用Math.Truncate()
- 总是将舍入为零 - 而不是:
$Interest_RatePart1 = [Math]::Truncate($Interest_Rate)
FWIW,你上一次尝试什么都不返回的原因,是因为-split
默认使用正则表达式,.
表示正则表达式中的任何字符。
使用.
转义\
:
$Interest_RatePart1 = ($Interest_Rate -split '\.')[0].Trim()
或指定它不应该使用正则表达式:
$Interest_RatePart1 = ($Interest_Rate -split '.', 2, 'SimpleMatch')[0].Trim()
或改为使用String.Split()
方法:
$Interest_RatePart1 = "$Interest_Rate".Split('.')[0].Trim()
答案 1 :(得分:2)
Mathias'[Math]::Truncate
是正确的 - 除了其他一些选项之外,在处理负数时请注意Floor
Slightly Different到Truncate
。
转换为int(可以向上舍入)
[int]$Interest_Rate
使用[Math]::Floor
(将始终向下舍入,类似于截断非负数)
[Math]::Floor($Interest_Rate)
将[Math]::Round
与0
小数位一起使用。 (可以围捕)
[Math]::Round($Interest_Rate, 0)