Powershell - remove currency formatting from a num

2019-09-09 16:54发布

can you please tell me how to remove currency formatting from a variable (which is probably treated as a string).

How do I strip out currency formatting from a variable and convert it to a true number?

Thank you.

example

PS C:\Users\abc> $a=($464.00)
PS C:\Users\abc> "{0:N2}" -f $a
                         <- returns blank

However

PS C:\Users\abc> $a=-464
PS C:\Users\abc> "{0:C2}" -f $a
($464.00)                 <- this works

1条回答
太酷不给撩
2楼-- · 2019-09-09 17:43

PowerShell, the programming language, does not "know" what money or currency is - everything PowerShell sees is a variable name ($464) and a property reference (.00) that doesn't exist, so $a ends up with no value.

If you have a string in the form: $00.00, what you can do programmatically is:

# Here is my currency amount
$mySalary = '$500.45'

# Remove anything that's not either a dot (`.`), a digit, or parentheses:
$mySalary = $mySalary -replace '[^\d\.\(\)]'

# Check if input string has parentheses around it
if($mySalary -match '^\(.*\)$')
{
    # remove the parentheses and add a `-` instead
    $mySalary = '-' + $mySalary.Trim('()')
}

So far so good, now we have the string 500.45 (or -500.45 if input was ($500.45)).

Now, there's a couple of things you can do to convert a string to a numerical type.

You could explicitly convert it to a [double] with the Parse() method:

$mySalaryNumber = [double]::Parse($mySalary)

Or you could rely on PowerShell performing an implicit conversion to an appropriate numerical type with a unary +:

$mySalaryNumber = +$mySalary
查看更多
登录 后发表回答