Power Automate for desktopの変数に関するTips「数値の切り捨て」アクションの挙動

## 概要

Power Automate for desktopの変数アクション「数値の切り捨て」について調べました。ExcelのROUND関数と少し異なる挙動を取るため注意が必要です。

## 注意事項等

- Power Automate for desktop 2.20.132.22123
- 個人調べであることをご理解ください。
- 2022年5月の情報です。
- 現時点ではコピペで試せるサンプルフローを載せますがアップデート等で動作しなくなる可能性があります。
- アップデートにあわせたサンプルフローの更新はしません。

## 試したこと

- ExcelではROUND関数を使って0から10まで0.5刻みで小数点一位を四捨五入しました。
- Power Automate for desktopでは「数値の切り捨て」アクションの「数値の四捨五入」操作を使って0から10まで0.5刻みで小数点一位を四捨五入しました。
- 各数値を累計しました。

## 結果

### Excel

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/06cd410c-6ceb-619b-6a00-e6f30fe7aea7.png)

### Power Automate for desktop

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/f15d37c8-9777-f3fe-05a5-ecbdea454eec.png)

## 「数値の切り捨て」アクション

「丸め」についてのルールは書かれていません。

Docs [数値の切り捨て](https://docs.microsoft.com/ja-jp/power-automate/desktop-flows/actions-reference/variables#truncatenumber)

https://docs.microsoft.com/ja-jp/power-automate/desktop-flows/actions-reference/variables#truncatenumber

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/d191a23a-ffea-87a6-e73d-46362a7ffaa5.png)

## フロー

「数値の切り捨て」アクションの挙動をみるためにデータテーブルを生成します。変数内ですべて処理する方法およびPowerShellスクリプトアクションを使用した計算処理をしています。コメントに解説はかいています。リスト、データテーブル型変数を活用したサンプルになっています。コピペお試しいただければ幸いです。

- [Power Automate Desktop の変数（5）「リスト型」](https://qiita.com/sys_zero/items/82951049466791b2b728)
- [Power Automate Desktop の変数（6）「データテーブル型」](https://qiita.com/sys_zero/items/171d73ba24e123dd1b66)

![スクリーンショット 2022-05-26 000735.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/71624568-5d5a-ad34-b3a8-23abad8409e8.jpeg)


```r:Power Automate for desktop
/# ###############################
テーブル生成
################################/
SET Table TO { ^['元値', '四捨五入', '元値累計', '四捨五入値累計'] }
/# ###############################
初期値設定
################################/
SET RowCount TO 0
SET null TO $'''%''%'''
/# ###############################
0~10まで増分0.5でループ
################################/
LOOP LoopIndex FROM 0 TO 10 STEP 0.5
    /# ###############################
空リスト生成し[0]に元値、[1]に小数点一位を四捨五入した値を書き込む
################################/
    SET List TO [null, null, null, null]
    SET List[0] TO LoopIndex
    Variables.TruncateNumber.RoundNumber Number: LoopIndex DecimalPlaces: 0 Result=> TruncatedValue
    SET List[1] TO TruncatedValue
    /# ###############################
テーブルにリストを行として追加する
################################/
    SET Table TO Table + List
    /# ###############################
元値、四捨五入値の合計を[RowCount][2]および[3]に書き込む
################################/
    LOOP ColumnLoopIndex FROM 0 TO 1 STEP 1
        Variables.RetrieveDataTableColumnIntoList DataTable: Table ColumnNameOrIndex: ColumnLoopIndex ColumnAsList=> ColumnAsList
        Text.JoinText.JoinWithCustomDelimiter List: ColumnAsList CustomDelimiter: $''',''' Result=> JoinedText
        Scripting.RunPowershellScript Script: $'''$SumValue=(%JoinedText%)|Measure-Object -sum
$SumValue.sum''' ScriptOutput=> PowershellOutput ScriptError=> ScriptError
        SET Table[RowCount][ColumnLoopIndex + 2] TO PowershellOutput.Trimmed
    END
    Variables.IncreaseVariable Value: RowCount IncrementValue: 1 IncreasedValue=> RowCount
END
```
## まとめ

Power Automate for desktopフロー内で計算する機会はすくないかもしれませんが、ExcelのRound関数と異なった挙動を確認できました。四捨五入について調べると結構深いです。というかそれぞれのルールが適用されているようなので（例えば銀行丸め）、なんでそうなるというより事実ベースで知っておくのは大切だと思います。最近は[個人ブログ](https://www.syszero.net/)の方への投稿しかしていませんが、意外な落とし穴になりそうなので変数シリーズとしてQiitaに書きました。