分かりやすく、使いやすく。

Excel の RoundUp と同じ方法で端数を切り上げる方法

スポンサーリンク

PowerShell で端数の切り上げを行う場合、 Math クラスの Ceiling メソッドを使うことができますが、Ceiling メソッドには、①切り上げを行う桁数を指定できない、②マイナスの数値の場合、切り上げ後の値がゼロに近づく、という業務システムでは扱いづらい特徴があり、そのまま使用すると Excel の RoundUp 関数のような処理はできません。

その為、PowerShell で Excel の RoundUp 関数の同様の処理を行うには次の関数を定義します。

PowerShell(RoundUp関数と同じ切り上げを行う関数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 第一引数に切り上げを行う値を設定(必須)
# 第二引数に何桁目で切り上げを行うか設定(任意)
#         ・プラスの値:小数点以下第N位より小さい位を切り上げ
#         ・マイナスの値:-1なら1の位、-2なら10の位より小さい位を切り上げ
function RoundUp([double]$num, [int]$numDigits = 0)
{
    $m = [Math]::Pow(10, $numDigits);
 
    if($num -ge 0){
        return [Math]::Ceiling($num * $m) / $m;
    }else{
        return [Math]::Floor($num * $m) / $m;
    }
} 

上記の関数をテストした結果は次の通りです。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# プラスの数値のテスト
Write-Host (RoundUp 1111.1111 4);  # 1111.1111
Write-Host (RoundUp 1111.1111 3);  # 1111.112
Write-Host (RoundUp 1111.1111 2);  # 1111.12
Write-Host (RoundUp 1111.1111 1);  # 1111.2
Write-Host (RoundUp 1111.1111 0);  # 1112
Write-Host (RoundUp 1111.1111 -1); # 1120
Write-Host (RoundUp 1111.1111 -2); # 1200
Write-Host (RoundUp 1111.1111 -3); # 2000
Write-Host (RoundUp 1111.1111 -4); # 10000
 
# マイナスの数値のテスト
Write-Host (RoundUp -1111.1111 4);  # -1111.1111
Write-Host (RoundUp -1111.1111 3);  # -1111.112
Write-Host (RoundUp -1111.1111 2);  # -1111.12
Write-Host (RoundUp -1111.1111 1);  # -1111.2
Write-Host (RoundUp -1111.1111 0);  # -1112
Write-Host (RoundUp -1111.1111 -1); # -1120
Write-Host (RoundUp -1111.1111 -2); # -1200
Write-Host (RoundUp -1111.1111 -3); # -2000
Write-Host (RoundUp -1111.1111 -4); # -10000 
スポンサーリンク
スポンサーリンク