使用Powershell提取小数点前的数字

时间:2018-01-27 16:16:12

标签: powershell

我正在使用Powershell,需要提取小数点前的数字,以便我可以评估提取的数字

使用$Interest_Rate = 15.5

我尝试过以下代码..但它们不起作用:

$Interest_RatePart1 = "{0:N0}" -f $Interest_Rate

它将值四舍五入为16

$Interest_RatePart1 = ($Interest_Rate -split '.')[0].trim()

它返回一个空白。 我只想返回15

2 个答案:

答案 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 DifferentTruncate

  • 转换为int(可以向上舍入)

    [int]$Interest_Rate
    
  • 使用[Math]::Floor(将始终向下舍入,类似于截断非负数)

    [Math]::Floor($Interest_Rate)
    
  • [Math]::Round0小数位一起使用。 (可以围捕)

    [Math]::Round($Interest_Rate, 0)