■ Power Automate で四捨五入
Power Automate には四捨五入を行ってくれる関数がありません。
そこで、多くの方がいろいろと頑張っているようです。軽く調べてみたら主流はどうも次のような感じみたいです。
※この記事では簡略化のため、整数に四捨五入するパターンのみを考えます。
{ "inputs": { "from": [ 1.5, 2.5 ], "select": "@formatNumber(decimal(item()), 'F0')" } }
■ 結果が JIS じゃない
この実行結果、JIS の四捨五入になっていません。例えば C# では次のようになります。
Console.WriteLine(Math.Round(1.5, 0)); // 2 Console.WriteLine(Math.Round(2.5, 0)); // 2
たいていの業務で四捨五入といえば、JIS の四捨五入のはずです。金額や寸法、量など。JIS の四捨五入でない業務は私は見たことがりません。
良くある呼び方
JIS の四捨五入は 銀行丸め と呼ぶ方も多いです。
■ 余談
この JIS の四捨五入、システムのバグとして報告されることが非常に多いです。
理由は、Excel がそうなっていないから。
しかし、バグとして報告されるも業務を調べたら JIS の四捨五入が正しい業務だったという確率は 100% です。覚えておくと少し不幸が避けられるかもしれません。
■ Power Automate でやってみよう
if ( or(greater(mod(item(), 1), 0.5), equals(mod(sub(item(), mod(item(), 1)), 2), 1)) , float(formatNumber(item(), 'F0')) , sub(item(), mod(item(), 1)) )
{ "inputs": { "from": [ 1.5, 2.5 ], "select": "@if (\r\n or(greater(mod(item(), 1), 0.5), equals(mod(sub(item(), mod(item(), 1)), 2), 1))\r\n , float(formatNumber(item(), 'F0'))\r\n , sub(item(), mod(item(), 1))\r\n)" } }
それっぽい結果になりました。