• ベストアンサー

エクセル ROUNDDOWNの切り捨て

関数式 =ROUNDDOWN((L15/D15-M15)*D15,2)             (57÷25)-2)×25=7.0     =ROUNDDOWN((L15/D15-M15*D15,1)             (57÷25)-2)×25=6.9 なぜ答えは7.0なのになぜ6.9の答えがでるのですか、考えてもわかりません。 在庫表で使用しています。まだ初心者です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

【別回答】 対策1、ROUNDDOWN()で発生する誤差はRounds()で回避。 対策2、関数式を簡略化する。 ROUNDDOWN()で発生する誤差は、自前の関数を用意するのが一番ですが・・・。たーだ、今回に限定すれば、関数式を簡略化するのが正解だと思います。 =ROUNDDOWN(((L15/D15-M15)*D15,1)  ↓ =ROUNDDOWN((L15-M15*D15,1) =((57/25)-2)*25 =(57/25)*25-50 =(57*25)/25-50 =57-50 ←L15-M15*D15 =7

その他の回答 (4)

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.4

この演算式に問題があります。 L15/D15-M15 Excelは計算を2進数でやっています。ですので、小数の計算は 必ず誤差が出ます。特にゼロに近い小数は誤差が大きくなるので 途中結果がゼロに近い小さな小数になる場合は、なるべく整数に 近い数値が結果になるように、考えて計算する必要があります。 ということで、(L15*1000/D15-M15*1000)/1000みたいに割算の 結果が十分大きな数になるように、演算式を調整してみて下さい。 ちなみに、なぜ「Excelで小数点以下の数字が狂うのか」は、 以下のサイトに詳しく乗っています。 https://eip.econ.kanagawa-u.ac.jp/eip/excel-calc-error.html なお、上記以前の問題としてこういう点にも注意が必要です。 https://www.excelspeedup.com/dentakuhasuu/

回答No.3

【初回回答の訂正】 =Rounds(((57/25)-2)*25,1,1) が正しいテストの仕方です。で、結果は、7.0です。 6.9なのか7.0なのかのテストですので、桁数を指定してテストすべきでした。

回答No.2

【補足】四捨五入や切り捨ての桁の指定は3番目目の引数で! ? Rounds(1.05, 1, 1) 1.0 なお、-1という指定もできます。

回答No.1

Q、なぜ6.9なのか? A、それは、ROUNDDOWN()のバグだと思いますよ。 Excelは操作したことのない門外漢ですが、ちょっとテストしてみました。すると、添付図のように確かに7.0でなくて6.9になりました。でも、私が作成したRounds()で切り捨てると7.0。つまり、私かExcelかのどちらかがバグっているってことです。 Public Function Rounds(ByVal M As Currency, _             ByVal A As Integer, _             Optional D As Integer = 0) As Variant   Dim R As Currency      Select Case A     Case 0 ' 四捨五入       R = Fix(M * 10 ^ D + 0.5@)     Case 1 '切り捨て       R = Fix(M * 10 ^ D)     Case 2 ' 切り上げ       If Int(M) <> M Then         R = Fix(M * 10 ^ D) + 1 * 10 ^ D       Else         R = Fix(M * 10 ^ D)       End If   End Select   Rounds = Sgn(M) * (R / 10 ^ D) End Function ? Rounds(0.5,0)←四捨五入=0 1 ? Rounds(0.5,1)←切り捨て=1 0 ? Rounds(0.1,2)←切り上げ=2 1