いつも勉強させてもらっています。いま、ちょっとした集計をしています。
ROUND関数を使って、四捨五入して、整数にしたいのですが、意図した結果になりません。
以下のようなデータがあります。
値1 | 値2 |
2 | 40 |
23 | 40 |
1 | 40 |
値1を値2で割って100をかけて%にするのですが、
([値1]/[値2])*100 | Round(([値1]/[値2])*100, 1) | Round(([値1][値2])*100, 2) | Round(([値1]/[値2])*100, 0.1) |
5 | 5 | 6 | 5 |
57.5 | 57 | 58 | 57.5 |
2.5 | 3 | 2 | 2.5 |
Round(([値1]/[値2])*100, 1) にするとほかの値は四捨五入されるのに 57.5が四捨五入されず、57になり、
Round(([値1][値2])*100, 2) にすると57.5が四捨五入されるのに、5が6になったり、2.5が2になってしまいます。
なにが問題なのでしょうか。
すべて四捨五入したいだけなのですが。
ワークフローも添付します。
どなたか解説していただけないでしょうか。よろしくお願いいたします。
解決済! 解決策の投稿を見る。
@aifumi さん
ヘルプによると「戻り値 (x) の最も近い倍数 (mult) に丸められた値」ということになっています。
ですので、「Round(([値1][値2])*100, 2) 」については2の倍数に丸められます。
5であれば、4か6の近い方に丸められ、四捨五入的に考えると6に丸められるで正解かと思います。
57.5は56と58の近い方に丸められるので、58となります。
一番の問題は、「Round(([値1]/[値2])*100, 1)」で、57になることでしょうか・・・。
中身の計算としては「[値1]/[値2])*100」ですので57.5となり、四捨五入すると58になるべきです。
(ちなみに、57.5をRound関数でRound(57.5,1)とすると、58となります。
英語版のCommunityなどを覗いていると同様のディスカッションがされていました。
これによると、コンピュータが浮動小数点を扱う際の精度の問題で、Alteryxは計算の際に一度すべてDoubleにするためどうしても精度の問題が出てくる、という話のようです。
多少強引ですが、以下のような式で回避できると思います。
Round(([値1]/[値2])*1000, 10)/10
解決策まで提示してもらい、ありがとうございます。余談ですが、ROUNDで2の倍数とか3の倍数とかに丸めるってどういう場合なんでしょうね。
倍数に丸めるのは、、、あまり思い浮かばないですね・・・。何かそういうシチュエーションについてご存知の方がいらっしゃったら紹介頂けると助かりますね!
「銀行丸め」と言われている計算方法になります。
2.5→2.0、3.5→4.0、4.5→5.0、5.5→6.0、6.5→6.0 ‥‥
という結果になります。
ExcelのVBAでのRound関数等が代表的です
Googleで「銀行丸め」で検索してみてください。