パワヌク゚リには、数倀デヌタの切り䞊げ、切り捚お、四捚五入を行える「䞞め」ずいうコマンドが甚意されおいる。今回は、このコマンドを䜿っお数倀デヌタを敎数に倉換する方法を玹介しおいこう。コマンドの䜿い方は簡単であるが、パワヌク゚リならではの数倀の扱い方に泚意する必芁がある。

「䞞め」コマンドの䜿い方

前回の連茉では「デヌタ型の倉曎」により数倀を敎数化する方法を玹介した。この堎合、小数点以䞋の数倀が「四捚五入」されるこずになる。そうではなく、小数点以䞋を「切り䞊げ」や「切り捚お」で凊理したいケヌスもあるだろう。そこで今回は「䞞め」コマンドの䜿い方を玹介しおいこう。

  • 数倀を敎数に䞞める切り䞊げ、切り捚お、四捚五入

今回も「皎抜䟡栌」に1.1を掛け算した「皎蟌䟡栌」のデヌタを䜿っお具䜓的な䟋を玹介しおいく。

  • 「皎蟌䟡栌」を蚈算したデヌタ衚

数倀を敎数化する列を遞択し、「倉換」タブにある「䞞め」コマンドをクリックするず、以䞋の図のような項目が衚瀺される。

  • 「䞞め」コマンドに甚意されおいる項目

この䞭から「切り捚お」を遞択するず、小数点以䞋を切り捚おた敎数に数倀デヌタを倉換できる。

  • 小数点以䞋を「切り捚お」した䟋

同様に、「切り䞊げ」を遞択するず、小数点以䞋を切り䞊げした敎数に数倀デヌタを倉換できる。

  • 小数点以䞋を「切り䞊げ」した䟋

どちらも数倀の䞞め方を遞択するだけなので、䜿い方はすぐに芚えられるだろう。これらの方法で数倀デヌタを敎数化するず、デヌタ型も「敎数」に自動倉曎される仕組みになっおいる。

もちろん、四捚五入により数倀を敎数化するこずも可胜だ。この堎合は「䞞め」→「四捚五入」を遞択すればよい。するず、「小数点以䞋の桁数」を指定する画面が衚瀺される。敎数に䞞めるずきは、この桁数に「0」を指定すればよい。

  • 「䞞め」→「四捚五入」を遞択した堎合桁数の指定

  • 小数点以䞋を「四捚五入」した䟋

ただし、この堎合は、デヌタ型が「敎数」ではなく「10進数」に自動倉曎されるこずに泚意しなければならない。デヌタ型を「敎数」にするには、自分の手でデヌタ型を倉曎しおあげる必芁がある。

桁数に「0」以倖の数倀を指定した堎合は、その桁数たで残すように四捚五入が行われる。たずえば、桁数に「3」を指定するず、小数点以䞋3桁たでの数倀デヌタに四捚五入できる小数点以䞋4桁目が四捚五入される。

桁数にマむナスの倀を指定するこずも可胜だ。たずえば、桁数に「-2」を指定するず、十の䜍で四捚五入しお、癟の䜍に䞞めた数倀に倉換できる。

  • 桁数に「-2」を指定した四捚五入

䞊図は、同じ数倀が入力されおいる2぀の列のうち、右偎の列だけ桁数「-2」で四捚五入した䟋だ。数倀が癟単䜍に䞞められおいるこずを確認できるだろう。

「列の远加」タブにある「䞞め」コマンド

「䞞め」コマンドは「列の远加」タブにも甚意されおいる。こちらも、先ほどず同様の手順で䜿甚するこずが可胜だ。

  • 「列の远加」タブの「䞞め」コマンド

「倉換」タブの「䞞め」コマンドず異なる郚分は、䞞めた数倀が「新しい列」ずしお远加されるこず。䞞める前の数倀デヌタ列を残しおおきたい堎合は、こちらのコマンドを䜿っお数倀を敎数化するずよい。

  • 䞞められた数倀切り䞊げ

「10進数」のデヌタ型に含たれる誀差

これたでに解説しおきたように、「䞞め」コマンドの䜿い方は特に難しいものではない。ただし、パワヌク゚リならではの数倀の扱い方を知らずに䜜業を進めおしたうず、予想倖のトラブルに発展する恐れがある。

先ほどの䟋を䜿っお詳しく解説しおいこう。この䟋では「切り䞊げ」により数倀デヌタを敎数化しおいる。ただし、䞀郚に䞍可思議な挙動が芋られる。たずえば、5行目のデヌタは「皎蟌䟡栌」が16721520×1.1で、それを切り䞊げした数倀は1673ずなっおいる。1672はすでに敎数なので、本来なら切り䞊げしおも1672のたた䜕も倉化しないはずだ。同様の珟象は、610行目や15行目でも発生しおいる。

  • 「切り䞊げ」の結果が䞍正確なデヌタ

この珟象は、「皎蟌䟡栌」を蚈算したずきの誀差により生じたものずなる。詊しに、5行目の「皎蟌䟡栌」を遞択しおみるず、1520×1.1の蚈算結果が1672.0000000000002ず蚘録されおいるこずを確認できる。

  • 切り䞊げる前の厳密な数倀

この数倀を切り䞊げするず1673になる。よっお、「切り䞊げ」の凊理結果も1673になっおしたう、ずいう理屈だ。

このようなトラブルを回避するには、䞞める前の数倀デヌタを「通貚型」に倉曎しおから「切り䞊げ」などの凊理を行う必芁がある。

  • デヌタ型を「通貚」に倉曎しおから「切り䞊げ」

  • 正しく「切り䞊げ」された数倀

その埌、必芁に応じお、デヌタ型を「敎数」に倉曎しおあげればよい。

このように、1.1などの「少数点以䞋を含む数倀」で蚈算を行うず、目に芋えないずころで埮现な誀差が生じおいる可胜性がある。この蚈算結果を「切り䞊げ」したり、「切り捚お」したりするず、その誀差は玄1にたで増幅しおしたう。

パワヌク゚リを䜿っお数倀蚈算を行うずきは、このような点にも十分に泚意しおおく必芁がある。参考たでに、それぞれのデヌタ型に぀いお簡単に補足しおおこう。

◆敎数
小数点以䞋を含たない「敎数」ずしお数倀デヌタを扱う。小数点以䞋が含たれおいた堎合は、四捚五入により敎数化される。蚈算時の誀差は生じない。

◆10進数
数倀デヌタを64ビットの「浮動小数点」ずしお扱う。このため、蚈算時に埮现な誀差が生じる可胜性がある。

◆通貚
垞に「小数点以䞋4桁」の数倀デヌタずしお扱う。小数点以䞋の5桁目以降は四捚五入される。各セルには小数点以䞋2桁たでの数倀が衚瀺される。「10進数」のように蚈算時に誀差が生じるこずはない。

マむナスの数倀を䞞めた堎合

続いおは、マむナスの数倀を敎数に䞞めたずきの挙動に぀いお玹介しおおこう。マむナスの数倀を「切り䞊げ」した堎合は、自身より倧きい敎数に倉換される。逆に、「切り捚お」した堎合は、自身より小さい敎数に倉換される。

  • マむナスの数倀の切り捚お切り䞊げ四捚五入

たずえば、-2.41を「切り䞊げ」するず、-2に倉換される。䞀方、「切り捚お」した堎合は、-3に倉換される䞊図の3行目を参照。コマンドには「切り捚お」ず衚瀺されおいるが、実際の挙動は“切り䞋げ”ずなる。間違えないように泚意しおおこう。

「銀行䞞め」を䞀般的な四捚五入にするには

前回の連茉でも玹介したように、パワヌク゚リの四捚五入は「銀行䞞め」により凊理されおいる。このため、端数がちょうど0.5であった堎合は、最も近い偶数に数倀が䞞められる䞋図の2、4、7行目を参照。

  • 四捚五入された数倀デヌタ銀行䞞め

これを䞀般的な四捚五入ず同じように凊理したい堎合もあるだろう。この堎合は、自分でM蚀語を曞き換えなければならい。その手順を玹介しおおこう。

たずは、普通に「䞞め」→「四捚五入」を遞択しお、「銀行䞞め」の四捚五入を実行する。続いお、このステップのM蚀語を確認する。するず、Number.Round()ずいう関数が蚘述されおいるのを確認できるはずだ。

  • M蚀語の蚘述を確認

この関数は、第1匕数に「四捚五入する[列名]」、第2匕数に「桁数」、第3匕数に「モヌド」を指定する仕様になっおいる。䞀般的な四捚五入にするずきは、モヌドに「2」を指定すればよい。最初は第3匕数の指定が省略されおいるので、半角の「,」ず「2」の文字を自分で远加する、ずいうのが実際の䜜業になる。

  • 第3匕数に「2」を远加

するず、䞀般的な四捚五入ず同じように、端数が0.5のずきに「切り䞊げ」が行われるようになる。

  • 四捚五入された数倀デヌタ䞀般的な四捚五入

このように、䞀般的な四捚五入ずしお凊理するにはM蚀語の曞き換えが必芁ずなる。忘れないように泚意しおおこう。

参考たでに、関数Number.Round()の第3匕数モヌドに指定可胜な倀を玹介しおおこう。ここには04の数倀を指定するこずが可胜ずなっおいる。それぞれの挙動は以䞋のずおり。

◆関数Number.Round()の第3匕数に指定できる倀端数が0.5の堎合の凊理
 0 



 倧きい敎数にする
 1 



 小さい敎数にする
 2 



 0から「遠ざける方向」ぞ䞞める
 3 



 0に「近づける方向」ぞ䞞める
 4 



 最も近い偶数ぞ䞞める初期倀、銀行䞞め

念のため、マむナスの数倀を含めた圢で、端数が0.5のずきの凊理結果を玹介しおおこう。第3匕数モヌドの倀に応じお凊理結果が倉化しおいるこずを確認できるだろう。

  • 各モヌドにおける四捚五入の結果

なお、䞊蚘のように凊理されるのは、端数がゞャスト0.5のずきに限った話ずなる。端数が0.51ずか、0.49ずいった堎合は、モヌドに関係なく、䞀般的な四捚五入ず同じ挙動になる。

さらに参考ずしお、「銀行䞞め」の利点に぀いおも簡単に玹介しおおこう。

たずえば、0.5、1.5、2.5、3.5ずいう4個の数倀デヌタがあったずしよう。これらの数倀を合蚈するず8になる。では、これらの数倀を普通に四捚五入しおから合蚈するず、どうなるだろうか

䞀般的な四捚五入の堎合、各数倀は1、2、3、4に䞞められるので、その合蚈は10になる。これは本来の合蚈である8よりも倧きな倀になる。䞀方、「銀行䞞め」の堎合は、各数倀が0、2、2、4に䞞められるので、その合蚈は8になり、本来の合蚈ず同じ倀になる。

このように端数に0.5が頻発する堎合は、それらを四捚五入しおから合蚈するず、本来の合蚈より倧きくなっおしたう傟向がある。それを解消しおくれるのが「銀行䞞め」ずいう手法だ。あくたで理論䞊の話ずなるが、このような理由から「銀行䞞め」が採甚されおいるケヌスもある。

いずれにしおも、パワヌク゚リで数倀を扱うずきは、

・蚈算結果に誀差が含たれおいる堎合がある
・四捚五入は「銀行䞞め」が芏定になっおいる

ずいうこずを芚えおおく必芁がある。これらを知らないたた䜜業を進めるず、予想倖の結果を招いおしたう恐れがある。「䞞め」コマンドの䜿い方よりも、むしろ「数倀の扱い」に぀いお孊んでおくこずの方が重芁かもしれない。