端数を切り捨てる方法
端数を切り下げて丸めを行う方法です。
小数部を切り捨てて整数にする
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 |
- PowerShell
- セキュア文字列を復号して平文にする
- if で条件分岐する
- バージョンを確認する方法
- ユーザーの入力を受け付けて、入力内容を変数に入れて使用する方法
- yyyymmdd 形式の文字列で現在日付を取得する方法
- 処理を途中で終了する方法
- Excel のファイルを新規作成する方法
- 使用可能なコマンドレット一覧を確認する方法
- 実行ポリシー(ExecutionPolicy)変更時にエラーが出た場合の対応方法
- 実行ポリシー(Execution Policy)を確認・変更する方法
- SQL Server に接続してテーブルの内容を SELECT する方法
- ソースコードの式の途中で改行する方法
- 呼び出し元のバッチに戻り値を返す方法
- v2.0 で使用可能なコマンドレット一覧
- 比較演算子一覧・サンプルコードあり
- 論理演算子一覧・サンプルコードあり
- ループを途中で抜ける方法
- テキストファイルの改行を全て削除する方法
- %{}の意味
- 実行中のスクリプトのファイル名を取得する方法
- 変数に NULL を代入する方法
- 変数の値が NULL かを判定する方法
- クラスを別ファイルに定義して読み込む方法
- FTP でファイルをアップロードする方法
- FTP で指定したディレクトリのファイルの一覧を取得する方法
- 文字列を日時型(DateTime)に変換する方法
- Write-Host 時に改行しない方法・途中で改行する方法
- 年度を取得する方法
- 端数を四捨五入する方法
- 端数を切り捨てる方法
- Excel の RoundDown と同じ方法で端数を切り捨てる方法
- Excel の RoundUp と同じ方法で端数を切り上げる方法
- 実行中に変数の中身を確認する方法
- 2個の日付の差の日数を計算する方法
- コメントの書き方
- 翌月、前月、Nヶ月後、Nヶ月前を取得する方法
- バッチファイル(*.bat)からパワーシェルファイル(*.ps1)を実行する方法
- プログラムを秒・ミリ秒を指定して一時停止する方法
- 一時的に実行ポリシー(Execution Policy)を変更する方法
- ファイル・フォルダ
- 空のファイルやフォルダを新規作成する方法
- ファイルやフォルダが存在するかを確認する方法
- Export-CSV の文字化け対策
- フォルダを削除する方法
- ファイルを削除する方法
- カレントフォルダや一階層上のパスを取得する方法
- ファイルの内容をクリアする方法
- フォルダを中身を含めてコピーする方法
- 親フォルダの絶対パスを取得する方法
- ファイルを移動する方法
- フォルダ内のファイル一覧を取得し、全てのファイルを処理する方法
- ファイルとフォルダのどちらかを判定する方法
- パスの文字列から拡張子やファイル名を取り出す方法
- 配列
- 配列の要素数を確認する方法
- 連想配列(ハッシュ)を使用する
- 連想配列(ハッシュ)のキーの一覧を取得する方法
- 配列内の値を検索する方法
- 配列をソートする(昇順・降順)
- 配列内の重複した値を削除する方法
- 配列の要素の値を連結して一つの文字列にする方法
- 変数が配列かを調べる方法
- 配列に要素を追加する方法
- 空の配列を作成する方法
- for で配列の全ての要素を処理する方法
- foreach で配列の全ての要素を処理する方法
- 空の連想配列(ハッシュ)を作成する方法
- 連想配列(ハッシュ)に指定したキーが含まれるかを確認する方法
- 連想配列(ハッシュ)に指定した値が含まれるかを確認する方法
- foreach で連想配列(ハッシュ)の全ての要素を処理する方法
- 連想配列(ハッシュ)をキーや値で並び替える方法(連想配列のソート)
- 配列に指定した値が含まれるかを確認する方法
- 配列の先頭の要素を削除する方法
- 文字列
- 文字列を検索し最初に一致した場所を取得する方法
- 文字列を検索し最後に一致した場所を取得する方法
- 文字列を区切り文字で分割して配列にする方法
- 文字列の文字数をカウントする方法
- 文字列のバイト数をカウントする方法
- 文字列の中で変数を展開する方法
- 大文字・小文字を区別して文字列の一致を確認する方法
- 英語の大文字・小文字を切り替える方法
- 文字列を置換する方法
- 左側をゼロ埋めして固定長の文字列にする方法
- 文字列が空文字や NULL であるかを判定する方法
- 文字列の右側からN文字取り出す方法
- 文字列の左側からN文字取り出す方法
- 文字列の一部を取り出す方法
- 文字列の両端の全角スペース/半角スペースを削除する
- ヒアドキュメントを使って複数行を 1 つの文字列にする
- 文字列が特定の文字列で始まるかを調べる
- タブや改行を文字列値に含める方法
- バッククオテーション ( ` ) を文字列値に含める方法
- シングルクオテーション ( ' ) を文字列値に含める方法
- ダブルクオテーション ( " ) を文字列値に含める方法