PowerShellのToStringで数値を書式指定で出力する際にはまった2点。どちらもエラーメッセージが適切ではなく、原因特定に苦労した。
PSVersion 5.1.14393.2969, Windows Server 2016上のISEで開発。Set-StrictMode -Version latest
書式#,#
はダメ
$num.ToString('#,#')
にて$numが0だと「“ToString” のオーバーロードで、引数の数が “1” であるものが見つかりません。」と出る。
$num.ToString('#,0')
とすることで、正しく出力される。
キャスト後のtoString
$s_num="99,999,999,99"
の場合に書式指定で出力したい場合、いったんlongにキャストするので
[long]$s_num.ToString("#,0")
と書くと、同様に「“ToString” のオーバーロードで、引数の数が “1” であるものが見つかりません。」とでる。正解は
([long]$s_num).ToString("#,0")
キャスト演算子よりもToStringの方が優先度が高いのか…