10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Power Query の数値を丸める関数

Last updated at Posted at 2019-02-15

どうして?って話があったのでまとめておくかと思った次第。数値の端数処理。ムキーっとなることがあるのです。慎重にというか忘れなければよいだけのこと。

先に、数値丸めにあるある結論

Power Query で数値の四捨五入を特段の指定なく計算した結果はいわゆる 銀行型丸め。なので、Excel ワークシート関数の ROUND 関数 などの"四捨五入"とは異なる。ちなみに、ROUND function - DAXもいわゆる算術型丸めで"四捨五入"。

すべてTRUE
Number.Round( 1.4 ) = 1
Number.Round( 1.4, 0, RoundingMode.ToEven) = 1
Number.Round( 1.4, 0, RoundingMode.AwayFromZero) = 1

Number.Round( 1.5 ) = 2
Number.Round( 1.5, 0, RoundingMode.ToEven) = 2
Number.Round( 1.5, 0, RoundingMode.AwayFromZero) = 2

Number.Round( 2.4 ) = 2
Number.Round( 2.4, 0, RoundingMode.ToEven) = 2
Number.Round( 2.4, 0, RoundingMode.AwayFromZero) = 2

// チョットチガウ
Number.Round( 2.5 ) = 2
Number.Round( 2.5, 0, RoundingMode.ToEven) = 2 
Number.Round( 2.5, 0, RoundingMode.AwayFromZero) = 3

Power Query の数値を丸める関数

丸めの種類はたくさんあるので便利ですよね。と、言ってもすべてを使いこなすイメージは持ち合わせていない。

Number.Round

Number.Round
丸めた数値を返します。桁数と丸めモードを指定できます。
RoundingMode.Type (丸めモード)
RoundingMode.Up
RoundingMode.Down
RoundingMode.AwayFromZero
RoundingMode.TowardZero
RoundingMode.ToEven

中間の値(例えば、丸め桁数 0 で 0.5 とか 0.0)でどのように丸めるか。丸め方を選ぶことができるので必要な結果に合わせて選ぶ感じでしょう。
RoundingMode.ToEven が "最近接丸め(偶数)" で"銀行型丸め"
RoundingMode.AwayFromZero が "最近接丸め(0から遠い方へ)" いわゆる四捨五入
RoundingMode.TowardZero は 0に近い方へって感じでしょうか
RoundingMode.UpRoundingMode.Down は "方向丸め"だけど切り捨て/切り上げとちょっと違う

そのほか

Number.RoundAwayFromZero
.正の数値の場合は切り上げた結果を返し、負の数値の場合は切り下げた結果を返します。桁数は指定できます。

Number.RoundDown
.次に小さい数値を返します。桁数は指定できます。

Number.RoundTowardZero
正の数値の場合は切り下げた結果を返し、負の数値の場合は切り上げた結果を返します。桁数は指定できます。

Number.RoundUp
次に大きい数値を返します。桁数は指定できます。

比較するテーブルを出力
let
    Source = List.Transform(
        {-10 .. 10},
        each
            [
                _Value = _ / 100,
                RoundAwayFromZero = Number.RoundAwayFromZero(_Value, 1),
                ModeAwayFromZero = Number.Round(_Value, 1, RoundingMode.AwayFromZero),
                RoundTowardZero = Number.RoundTowardZero(_Value, 1),
                ModeTowardZero = Number.Round(_Value, 1, RoundingMode.TowardZero),
                RoundDown = Number.RoundDown(_Value, 1),
                ModeDown = Number.Round(_Value, 1, RoundingMode.Down),
                RoundUp = Number.RoundUp(_Value, 1),
                ModeUp = Number.Round(_Value, 1, RoundingMode.Up),
                ModeToEven = Number.Round(_Value, 1, RoundingMode.ToEven)
            ]
        ),
    Custom1 = Table.FromRecords(Source)
in
    Custom1

その他

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?