NumbersのROUNDDOWN関数の計算結果がおかしい

iWork Numbers

Mac OS Xや iOS(iPhone, iPad)のNumbersでROUNDDOWN関数を使って切り捨て処理を行った時に正しい計算結果にならないことがあります。下記例ではROUNDDOWN関数を使った場合の例です。切り捨ては小数点以下としていて 680*0.7の正しい計算結果は 476です。

  • ROUNDDOWN関数を使わないで、単純な乗算を行った時の結果は 476 となり問題ありません。
    =680 * 0.7

  • ROUNDDOWN関数を使った場合、 475 となり本来の値(476)より 1 小さくなっています。
    =ROUNDDWON(680 * 0.7, 0)

この値の差は、小数点を含む値(例では 0.7)を使っている為に発生します(コンピューター特有の浮動小数点による計算誤差といわれるものでNumbersの仕様)。Numbersの仕様上では正しい計算結果となるので、こういった計算をする場合は小数点部分を意識して数式を作成する必要があります。

  • ROUNDDOWN関数に小数点を渡さないように補正した数式の場合は、 476 となり問題ありません。(補正は 0.7に 10を掛けて少数点をなくして計算し、その後10で割る)
    =ROUNDDOWN(680 * (0.7 * 10) / 10, 0)

ちなみに今回の例のをExcelで実行した場合、Excelでは発生しませんでしたがExcelでも浮動小数点の計算誤差が完全にない訳ではないのでご注意ください。
=ROUNDDOWN(680 * 0.7, 0)