• ベストアンサー

有効桁数未満は切り捨てていますか?

Roundup関数に関する質問と回答を拝見して、「有効桁数未満の値は切り捨てるのが一般的なのかな」との考えに到達しつつあります。正確に言えば、「丸めるべきかな」「小数点以下2桁で管理する場合、0.0001は0.000と評価する」ということです。 恥ずかしながら、丸めるという発想に至らずに、締切り処理時にゴミ値を探索して削除するという手法を取ってきました。プロの意見を賜りたい理由です。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>0.1cmは切り上げても良いが、それより小さい値まで切り上げろとは言っていない というのがユーザーの要求であれば 0.1未満は切り捨てる、0.1以上は切り上げるということになりましょう。 それが、要求なのですからウダウダいってもしょうがありません。 それが、常識的なのかどうかと言えば、 数学などの0が無限の精度を有しているとかではなく、 実際の計算の場面では、ニアゼロ(0.0001とか)がでてきますが(本来は0だが計算誤差などによってゼロでない)、それがゼロとは見なせなくて1に繰り上がると言えば、ちょっと常識とは異なると言えるのではないですか。 (つまり値の=は、数学とは違ってある(誤差を含めた)範囲でイコールとすべきであるというような意味) そういう意味で言えば、 「0.1cmは切り上げても良いが、それより小さい値まで切り上げろとは言っていない」という主張は、そういう意味合いが含まれていて、ただ計算の手順として切り上げろと言われたから切り上げたのであって文句を言うのは筋違いであるとまでは言えないのではないでしょうか。 結局の処そうした動作については、ユーザと提供側の間で詳細をつめておくべきであって、そうした動作に対する認識の違いがあったとしたら、ユーザーに合わせるべきですよね。 (実際の処は、大きなプロジェクトになれば、それを飲むことができるかどうかというのは別なのかもしれませんが)

noname#22222
質問者

お礼

ご指摘以前で、そういう事態さえ想定していなかったというのが本当のところです。「ニアゼロ」という概念も回答で知った次第です。これで、ExcelのRoundup関数のAccess版の全容が確定しました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

0.0001が10個集まれば、0.001なので、大きな誤差が生まれてしまいます。 科学技術計算などの場合は、大きな値同士、小さな値同士を先に計算し、最後に全体を計算し、演算精度による誤差を少なくします。途中で切り上げor切捨てが必要な場合を除き、切り上げor切捨ては、演算の最終結果で行います。 集計などを行う前の段階で、切り上げor切捨てすると誤差が生じますし、切り上げならともかく切り捨てると、「~が足らない」、「~が入りきらない」といったことになります。 足らなくなるより、余った方が多くの場合、ベターだと思いますが?

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

(プロではないですが、^^;) 用途によると思います。 例えば、消費税の計算などでは1円未満は切り捨てるという方針がある時には切り捨てるのでしょうし。 単純に、合計を求める場合に、全ての数値を切り捨てていたら、その誤差が集積してしまいますので、そのような場合は、五捨五入とかの方法も用いられます。 基本的には、切り捨てる場合と丸める場合では累積した計算での誤差の累積に影響がでるので、丸めるのが普通だと思います。

noname#22222
質問者

お礼

舌足らずの質問への回答あるがとうございます。 1、在庫の管理単位をユーザーが設定できる。 2、在庫の端数処理をユーザーが設定できる。 というケースでの不具合と処理の改善方向についての質問です。 想定外であったのが、リボン在庫でした。 メーター単位でcmの精度を設定されました。 加えて、切り上げ処理を選択されました。 小数点以下4桁を切り捨てて小数点以下3桁目で切り上げるとしなかったので、0.01cmも1.0cmと評価された次第です。 「これでは、0.00001も1cmと切り上げるではないか?」というクレームに近い疑問を受けた次第です。「0.1cmは切り上げても良いが、それより小さい値まで切り上げろとは言っていない」というのが言い分です。 「うーん」と思っていたところに Excel のROUNDUP関数を知り質問に至ったということです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 有効数字と桁数について

    有効数字と数字の桁数について、教えていただきたいことがあります。 大学で先生が測ってきた環境調査データの整理をしているのですが、ある濃度について、小数点以下が2桁のものと3桁のものが混在していました。 例えば、このような感じです。 0.23 mg/L 0.083 mg/L 違和感を感じたので、「0.220 mg/Lとしたり、四捨五入して0.08mg/Lとしたりしなくていいのですか?」と聞いたところ、「どちらも、有効数字2桁だから問題ない」と言われました。 0.23とは本来、0.225~0.235までの範囲の総称を0.22と言い、0.083とは本来、0.0825~0.0835までの範囲の総称を言うそうですが、そもそも、どちらの数字も同じ分析器機器で測定可能ということでした。ということは、基本的には1/1000の位までは正確に測れるんだと思います。ということは、0.23という数字についても小数点以下3桁で書くのが正しいのではないかと思ったのですが、こういう考えはダメでしょうか? また、別の項目では、 0.05 mg/L 0.21 mg/L という2つの数字が出てきました。 この場合、上の有効数字は1桁で、下の有効数字は2桁と考えられ、桁があってないのではないかと思います。 これは問題ないのでしょうか? 教えていただきたくよろしくお願いします。

  • 小数点以下の数字の桁数表示について

    VB6.0で小数点以下の数値が0の場合でも指定した桁数で0も表示するにはどのようにしたらよいですか? 例えば、四捨五入のROUND(0.195000,4)のとき返ってくる数値が「0.195」となり最後の0が表示されません。(以下は4桁表示したいのに) (小数点以下第5位が5なら切り上げで最後に1が表示されますが) エクセルだとセルの書式設定で表示桁数を設定するだけだったのですが。 FIXED関数、TEXT関数はVB6.0では使えないのですよね? VB6.0に詳しい方よろしくお願いします。お手数です。

  • エクセル 表示桁数変更の仕方を御指導願います。

    例 A1に任意の整数を入力すると。A2に数値B2に単位(無、万、億、兆)を表示するようにしたい。     9876 とA1に入力   A2:9876    B2:無    12345 とA1に入力   A2:1.2345   B2:万    A2:小数点以下4桁 12340 とA1に入力    A2:1.2340   B2:万    A2:小数点以下4桁  123456789とA1に入力   A2:1.23456789  B2:億    A2:小数点以下8桁    ユーザ定義で指定する表示桁数を関数で変更できる方法は有りませんか?  特に10000と入力したとき、1と表示するのでは無く、1.0000と表示させたいのです。  どなたか、御指導をお願いします。            

  • ROUND関数と小数点以下桁上げ(桁下げ)ボタンについて

    いつもお世話になっています。素朴な疑問ですが教えてください。 任意の桁数で切り上げや切り捨て、あるいは四捨五入を行なう関数としてROUNDUP関数やROUNDDOWN関数、そしてROUND関数というものが存在しますが、このうち四捨五入を行なうROUNDUP関数は、整数表示にしたい場合やそれ以下の小数第○位の表示にしたい場合に使う限りにおいては書式設定ツールバーの「小数点以下桁上げ(桁下げ)」ボタンを使えば事足りるのではないでしょうか? あるいは使い分けをしなければならないケースも存在するのでしょうか? ご存知の方いらっしゃいましたらぜひ教えてください。宜しくお願いいたします <(__)>

  • 教えてください1

    1以上100未満で入力した値の二乗根を求めるプログラムを実現せよ。 ただし配列、ポインタは用いない。 求める桁数は小数点以下7桁までで良い。 sqrt関数は使用しないこと <実行結果> 1以上100未満の数字を入力してください 72.1 root=8.491171

  • 小数点4桁での四捨五入がうまくいきません

    エクセルで次のような計算をさせます。 A2 に1.8、B2に0.075、C2に0.075、 D2に= A2*B2*C2 、E2に=roundup(D2,4) D2の計算結果は 0.010125 です。小数点第5桁目の値を参照して第4桁目で四捨五入したいのですが、roundupでは0.0102、rounddownでは0.0101です。 表示させたいのは0.0101です。この場合、rounddownを使えば問題ないのですが、逆にrounddownだと小数点以下4桁目の四捨五入がうまくいかない場合もあります。 例えば A3に2.7 B3に0.08、C3に0.08 があり、E3にすべての値を掛けた結果を表示させると0.01728となります。 =roundup(E3,4)では0.0173となり、rounddownでは0.0172となります。この場合はroundup関数の結果である0.0173が求める数値です。 A列、B列,C列に任意の数字が入り、E列に4桁目で四捨五入した正確な値を求めたいのですが、なにか良い方法はないでしょうか。 VBAを使っても構いません。ちなみにこれは木材の材積計算に使用する目的です。 よろしくお願いします。

  • Excel小数3桁目の丸め方

    丸め方で困っております。 関数で何とかならないものでしょうか? 宜しくお教え下さい。 小数3桁目の数字が5未満なら小数3桁目を切捨てる       ”  5なら小数3桁目をそのまま5       ”  6以上なら小数3桁目を切り上げ 例 1.234→1.230 1.235→1.235 1.236→1.240 ※小数3桁の数の入るセルを〔A1〕とし、A1は数式です。

  • C++でのdouble型データの精度

    こんにちは。 コンパイラは、Borland C++ Compiler 5.5 を使っています。 表題の「精度」とは、 正確な値が保証される、「整数部分の桁数」+「小数点以下の桁数」 の事です。 普通、double型データの「精度」は、16桁であると認識しています。 そのため、例えば、 a=123456789012345.6 という浮動小数点数は16桁なので、正しい値が保証されるはずです。 ところが、printf("%f", d1); のようにprintf関数で表示すると、 123456789012345.593800 と表示されました。 これは、d1が正しい値を保持できていないという事です そこで、桁数を下げていった所、 a=1234567890.1 つまり、精度は11桁しかないという事になります。 何か僕が勘違いしているのでしょうか? それとも、僕が使っているコンパイラの精度が11桁しかないという事なのでしょうか? 何かお分かりの方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • Excel複素数を小数点2桁でroundupしたい

    Excelで複素数の計算しております。 次のような複素数を小数点2桁でroundupしたいのですが、複素数のroundupは調べても出てきません。 515.47320280042+918.156853094894i 上記の複素数を; 515.47+918.16i のようにしたいのです。 IMREAL、IMAGINARYで実数と虚数部を分けてから、roundupしてそののちまたCOMPLEXで複素数に戻せば出来るのですが、例えばIMROUNUP(xxx,2)みたいな関数はないのでしょうか? 宜しくお願い致します。

  • excel関数についての質問です。

    A列に1000未満の様々な数字がはいっており、 現在関数を使って2段階で下記のように加工しているのですが それを1つにまとめたいと思い試行錯誤しておりますが、うまくいきません。 【例】281.25→282 、 28.125→28.2 、 2.8125→2.82  、 0.28125→0.29    15→15.0  、 1.5→1.50  、      ※3桁表示にしたい(○○○、○○.○、○.○○)     ※上記いずれも四捨五入でなく繰上げたい。    現在のところ B列には【繰上げの関数】 =IF(LEN(TRUNC(A1))>2,ROUNDUP(A1,0),IF(LEN(TRUNC(A1))>1,ROUNDUP(A1,1),ROUNDUP(A1,2))) C列には【桁数をそろえる為の関数(たとえば0.5を0.50とするため)】 =IF(LEN(TRUNC(B1))>2,TEXT(B1,"#0"),IF(LEN(TRUNC(B1))>1,TEXT(B1,"0.0"),TEXT(B1,"0.00"))) B列とC列の関数を合体して1つにまとめたいのですが、うまくいきません。 どなたかご教授いただけないでしょうか? ちなみにそれぞれの関数は私が作ったものではありませんが、 それぞれの関数自体は何とか理解できます。よろしくお願いします。