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

端数を切り捨てる方法

スポンサーリンク

端数を切り下げて丸めを行う方法です。

  1. 小数部を切り捨てて整数にする
  2. 小数点以下第二位を切り捨てて、第一位までの値とする
  3. 小数点以下の任意の位を切り捨てる関数
  4. 百の位や千の位など任意の桁で切り捨てる関数


小数部を切り捨てて整数にする

Math クラスの Truncate メソッド または Floor メソッドを使用します。Floor メソッドと Truncate メソッドの違いは、マイナスの数値の切り捨てを行った際に、Floor の場合はゼロから離れた値に、Truncate の場合はゼロに近い数字に丸められます。(プラスの数値の場合は同じ動作をします。)

サンプルコードは次の通りです。

PowerShell(プラスの値の場合、動作は同じ。)
1
2
3
4
5
6
7
8
9
10
# 1.9 小数部を切り捨てて整数にする。
$num = [Math]::Truncate(1.9);
 
Write-Host $num; # 1 
 
 
# 1.9 小数部を切り捨てて整数にする。
$num = [Math]::Floor(1.9);
 
Write-Host $num; # 1  
PowerShell(マイナスの値の場合。)
1
2
3
4
5
6
7
8
9
10
# 切り捨て後、ゼロに近い値に丸められる
$num = [Math]::Truncate(-1.9);
 
Write-Host $num; # -1
 
 
# 切り捨て後、ゼロから離れた値に丸められる
$num = [Math]::Floor(-1.9);
 
Write-Host $num; # -2 

情報系の業務システムなどで売上高等を表示する場合、赤字をマイナス表記することがありますが、この場合に端数を切り捨てて表示する場合は、 Truncate の方が向いています。

例えば黒字11.2百万円と赤字-11.2百万円の場合、端数を切り下げた結果は11百万円と-11百万円になる為です。

もう一度、 Floor と Truncate の違いを複数の値で見てみます。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
Write-Host ([Math]::Truncate(1.1)); # 1
Write-Host ([Math]::Truncate(1.9)); # 1
Write-Host ([Math]::Truncate(1.999999999)); # 1 
 
Write-Host ([Math]::Truncate(-1.1)); # -1
Write-Host ([Math]::Truncate(-1.9)); # -1
Write-Host ([Math]::Truncate(-1.999999999)); # -1 
PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
Write-Host ([Math]::Floor(1.1)); # 1
Write-Host ([Math]::Floor(1.9)); # 1
Write-Host ([Math]::Floor(1.999999999)); # 1 
 
Write-Host ([Math]::Floor(-1.1)); # -2
Write-Host ([Math]::Floor(-1.9)); # -2
Write-Host ([Math]::Floor(-1.999999999)); # -2  

小数点以下第二位を切り捨てて、第一位までの値とする

Truncate メソッドと Floor メソッドは小数部を切り捨てて整数にすることしかできない為、10倍して丸めた後、10で割って小数に戻しています。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
# 切り捨て対象の値
$targetNum = 1.39;
 
# 小数点第二位を切り捨てて第一位までの値とする。
$num = [Math]::Truncate($targetNum * 10) / 10;
 
Write-Host $num; # 1.3 
PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
# 切り捨て対象の値
$targetNum = 1.39;
 
# 小数点第二位を切り捨てて第一位までの値とする。
$num = [Math]::Floor($targetNum * 10) / 10;
 
Write-Host $num; # 1.3 

マイナスの数値の場合は Trucate と Floor で次のように違いが出ます。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
# 切り捨て対象の値
$targetNum = -1.39;
 
# 小数点第二位を切り捨てて第一位までの値とする。
$num = [Math]::Truncate($targetNum * 10) / 10;
 
Write-Host $num; # -1.3 
PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
# 切り捨て対象の値
$targetNum = -1.39;
 
# 小数点第二位を切り捨てて第一位までの値とする。
$num = [Math]::Floor($targetNum * 10) / 10;
 
Write-Host $num; # -1.4 

尚、上記のコードの 10 の部分を 100, 1000 と変えていくことで小数点以下第三位、第四位と切り捨てる桁を変更することができます。

小数点以下の任意の位を切り捨てる関数

次のサンプルコードの関数では、小数点以下第N位(Nは引数で指定)を切り捨てることができます。第一引数に切り捨て対象の値を指定し、第二引数に小数点第何位で切り捨てるかを指定します。第二引数を省略すると、小数部を切り捨てて整数を返します。

Math::Truncateを使用した自作関数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 第一引数に切り捨てを行う値を設定(必須)
# 第二引数に小数点以下第何位で切り捨てを行うかを設定(任意)
function Truncate([double]$num, [int]$numDigits = 0)
{
    $m = [Math]::Pow(10, $numDigits);
    return [Math]::Truncate($num * $m) / $m;
}
 
# プラスの値でテスト
Write-Host (Truncate 1.555);   # 1
Write-Host (Truncate 1.555 0); # 1
Write-Host (Truncate 1.555 1); # 1.5
Write-Host (Truncate 1.555 2); # 1.55
Write-Host (Truncate 1.555 3); # 1.555
Write-Host (Truncate 1.555 4); # 1.555
 
# マイナスの値でテスト
Write-Host (Truncate -1.555);   # -1
Write-Host (Truncate -1.555 0); # -1
Write-Host (Truncate -1.555 1); # -1.5
Write-Host (Truncate -1.555 2); # -1.55
Write-Host (Truncate -1.555 3); # -1.555
Write-Host (Truncate -1.555 4); # -1.555  
Math::Floorを使用した自作関数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 第一引数に切り捨てを行う値を設定(必須)
# 第二引数に小数点以下第何位で切り捨てを行うかを設定(任意)
function Floor([double]$num, [int]$numDigits = 0)
{
    $m = [Math]::Pow(10, $numDigits);
    return [Math]::Floor($num * $m) / $m;
}
 
# プラスの値でテスト
Write-Host (Floor 1.555);   # 1
Write-Host (Floor 1.555 0); # 1
Write-Host (Floor 1.555 1); # 1.5
Write-Host (Floor 1.555 2); # 1.55
Write-Host (Floor 1.555 3); # 1.555
Write-Host (Floor 1.555 4); # 1.555
 
# マイナスの値でテスト
Write-Host (Floor -1.555);   # -2
Write-Host (Floor -1.555 0); # -2
Write-Host (Floor -1.555 1); # -1.6
Write-Host (Floor -1.555 2); # -1.56
Write-Host (Floor -1.555 3); # -1.555
Write-Host (Floor -1.555 4); # -1.555  

百の位や千の位など任意の桁で切り捨てる関数

先ほど作成した「小数点以下の任意の位を切り捨てる関数」は、第二引数にマイナスの数値を与えると10の位や100の位で切り下げを行うことができます。

第二引数の値に応じた動作は次の通りです。

-1:1の位を切り捨てて10の位までとする。

-2:10の位を切り捨てて100の位までとする。

-3:100の位を切り捨てて1000の位までとする。

Math::Truncateを使用した自作関数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 第一引数に切り捨てを行う値を設定(必須)
# 第二引数に何桁目で切り捨てを行うかをマイナスの数値で指定(任意)
function Truncate([double]$num, [int]$numDigits = 0)
{
    $m = [Math]::Pow(10, $numDigits);
    return [Math]::Truncate($num * $m) / $m;
}
 
# プラスの値でテスト
Write-Host (Truncate 5555);    # 5555
Write-Host (Truncate 5555 0);  # 5555
Write-Host (Truncate 5555 -1); # 5550
Write-Host (Truncate 5555 -2); # 5500
Write-Host (Truncate 5555 -3); # 5000
Write-Host (Truncate 5555 -4); # 0
 
# マイナスの値でテスト
Write-Host (Truncate -5555);    # -5555
Write-Host (Truncate -5555 0);  # -5555
Write-Host (Truncate -5555 -1); # -5550
Write-Host (Truncate -5555 -2); # -5500
Write-Host (Truncate -5555 -3); # -5000
Write-Host (Truncate -5555 -4); # 0 
Math::Floorを使用した自作関数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 第一引数に切り捨てを行う値を設定(必須)
# 第二引数に何桁目で切り捨てを行うかをマイナスの数値で指定(任意)
function Floor([double]$num, [int]$numDigits = 0)
{
    $m = [Math]::Pow(10, $numDigits);
    return [Math]::Floor($num * $m) / $m;
}
 
# プラスの値でテスト
Write-Host (Floor 5555);    # 5555
Write-Host (Floor 5555 0);  # 5555
Write-Host (Floor 5555 -1); # 5550
Write-Host (Floor 5555 -2); # 5500
Write-Host (Floor 5555 -3); # 5000
Write-Host (Floor 5555 -4); # 0
 
# マイナスの値でテスト
Write-Host (Floor -5555);    # -5555
Write-Host (Floor -5555 0);  # -5555
Write-Host (Floor -5555 -1); # -5560
Write-Host (Floor -5555 -2); # -5600
Write-Host (Floor -5555 -3); # -6000
Write-Host (Floor -5555 -4); # -10000  
スポンサーリンク
スポンサーリンク