いやいやそんな時は、必殺のExcelを電卓にしろよ・・・と言われるでしょうが、Excel無い時とかどうしようもない。
PowerShellなら誰もが確実に持っている環境なので安心です。
たとえば、レンズの焦点距離を配列に格納し、それぞれ、フルサイズカメラに装着した時に、ASP-Cカメラの視点では焦点距離がどう変化するのか?というのを連続で計算したいと思います。
$A=@(15,20,24,28,35,40,50,85,100,150,200)
PowerShellで手入力にて配列を使う時は、@()を使います。
function APSC($value){return [Math]::Round($value/1.6,0,[MidpointRounding]::AwayFromZero)}
元の焦点距離を÷1.6しているのですが、小数点以下が沢山出てくるので、四捨五入して整数に丸めます。
この時は[Math]クラスのスタティックメソッドRoundを使います。
PowerShellで四捨五入する時は[MidpointRounding]::AwayFromZeroオプションをを絶対に設定しないといけません。しないと0.5が1じゃなくて0になってしまいます。
$A | %{APSC($_)}
単純な配列の繰り返し計算だけならもうこれだけでOK!!
$A | %{$_.ToString().PadLeft(3)+"mm => "+ (APSC($_)).ToString().PadLeft(3)+"mm相当"}
この処理のポイントはたった一つだけ、%{}が配列の内容を繰り返し処理する構文という事です。
15mm => 9mm相当
20mm => 13mm相当
24mm => 15mm相当
28mm => 18mm相当
35mm => 22mm相当
40mm => 25mm相当
50mm => 31mm相当
85mm => 53mm相当
100mm => 63mm相当
150mm => 94mm相当
200mm => 125mm相当
ちなみに、PadLeft(3)は、文字の左に空白を自動的に詰めて、指定桁数(今回は3桁)に揃えるメソッドです。