Free Trial

ディスカッション - 日本語

答えを見つけ、質問し、Alteryx の専門知識を共有してください。
解決済み

ROUND関数について

aifumi
メテオール

いつも勉強させてもらっています。いま、ちょっとした集計をしています。

ROUND関数を使って、四捨五入して、整数にしたいのですが、意図した結果になりません。

以下のようなデータがあります。

値1値2
240
2340
140

値1を値2で割って100をかけて%にするのですが、

([値1]/[値2])*100Round(([値1]/[値2])*100, 1)Round(([値1][値2])*100, 2)Round(([値1]/[値2])*100, 0.1)
5565
57.5575857.5
2.5322.5

 

Round(([値1]/[値2])*100, 1) にするとほかの値は四捨五入されるのに 57.5が四捨五入されず、57になり、

Round(([値1][値2])*100, 2) にすると57.5が四捨五入されるのに、5が6になったり、2.5が2になってしまいます。

なにが問題なのでしょうか。

すべて四捨五入したいだけなのですが。

ワークフローも添付します。

 

どなたか解説していただけないでしょうか。よろしくお願いいたします。

 

5件の返信5
AkimasaKajitani
オーロラ

@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などを覗いていると同様のディスカッションがされていました。

https://community.alteryx.com/t5/Alteryx-Designer-Discussions/Formula-Round-4-975-0-01-getting-4-97-...

https://community.alteryx.com/t5/Alteryx-Designer-Discussions/Rounding-Down-to-first-Decimal/td-p/24...

 

これによると、コンピュータが浮動小数点を扱う際の精度の問題で、Alteryxは計算の際に一度すべてDoubleにするためどうしても精度の問題が出てくる、という話のようです。

 

多少強引ですが、以下のような式で回避できると思います。

Round(([値1]/[値2])*1000, 10)/10

 

 

aifumi
メテオール

解決策まで提示してもらい、ありがとうございます。余談ですが、ROUNDで2の倍数とか3の倍数とかに丸めるってどういう場合なんでしょうね。

AkimasaKajitani
オーロラ

倍数に丸めるのは、、、あまり思い浮かばないですね・・・。何かそういうシチュエーションについてご存知の方がいらっしゃったら紹介頂けると助かりますね!

 

OkazakiMitsuhiro
アトム

「銀行丸め」と言われている計算方法になります。

2.5→2.0、3.5→4.0、4.5→5.0、5.5→6.0、6.5→6.0 ‥‥

という結果になります。

ExcelのVBAでのRound関数等が代表的です

Googleで「銀行丸め」で検索してみてください。

AkimasaKajitani
オーロラ

@OkazakiMitsuhiro さん

 

なるほど、勉強になります。

 

 

http://kanrikaikei-sys.com/2015/01/1764/

五捨五入ってのは昔聞いたことがあるような・・・。