[[20170809144524]] 『計算した時間を標準表記にしたが0表記の場所に数』(TMG) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『計算した時間を標準表記にしたが0表記の場所に数字が出る』(TMG)

初めて利用させていただきます。
Excelも不慣れなため、質問に不備があったら申し訳ございません。

時間の残業計算をしたいと思い、
横計算で

F列に勤務時間

G列に

=MAX(F1-"8:00",0)

H列に

=IF(ISERROR(G1),"",G1/"01:00:00")

としました。
正しく計算できそうだったので
それをフィルで全ての行にコピーしました。

しかし、殆どのセルが正しい数を返しているのですが
ある行のセルだけが

1.33227E-15

という謎の数字が出て困っています。
計算的には0が表示されるはずなのですが、
どうやっても直りません。

セルの書式設定の表示形式を見ると
標準と文字列とユーザー定義のサンプルが上と同様 1.33227E-15
指数のサンプル 1.E-15
日付のサンプル 1904/1/1
数値、通貨、会計、など他は 0
となっています。

(ちなみに同じ数値の入っている計算の行では指数のサンプルは0.E+00
になっています。)

数式を削除したり行を足したり色々しましたが

原因や対策がお分かりになる方がいらっしゃいましたら
アドバイスを宜しくお願い致します。

< 使用 Excel:Excel2016、使用 OS:Windows7 >


 >原因や対策がお分かりになる方がいらっしゃいましたら

 原因は、計算後の時間データが、小数演算誤差のセイで「0よりほんの少し大きい」からです。

 書式でやるか、計算式でやるかです。
         ↓
        =ROUND(MAX(F1-"8:00",0),12)

(半平太) 2017/08/09(水) 15:49


早速のアドバイスありがとうございます!
適用してみたところ問題なく表示されました。

ROUND関数についてはあまり理解できていないのですが、
誤差分を四捨五入させるという認識であっていますでしょうか。

その場合、12という数字はどこからでてきたのでしょうか。
解決はしたのですが、今後の為、ご教示いただけるとうれしいです。
(TMG) 2017/08/09(水) 16:44


 >ROUND関数についてはあまり理解できていないのですが、 
 >誤差分を四捨五入させるという認識であっていますでしょうか。 
 >その場合、12という数字はどこからでてきたのでしょうか。

 それを聞かれると、辛いものがあります。(とほほ)

 >=MAX(F1-"8:00",0) 
 >=IF(ISERROR(G1),"",G1/"01:00:00") 

 上の数式は、いつも小数演算誤差を含んでいると言っても過言ではないです。

 なのに、何故「1.33227E-15」と時だけがイラっとするのか・・ですね?

 それは「0のハズなのに、0と出ないから」です。

 0のハズがないケースでは、少なくとも「0:01」以上ですね。
 1分の実体は 0.000694444444444444です。

 その実体に「1.33227E-15」なんて鼻くそみたいなものが混入していたって誰もなんとも思いません。
          ↓
       0.00000000000000133227 と同じ

 逆に言えば、下12桁で四捨五入して 0.0006944444440000000 にした所で、誰も何とも思いません。
            何せ1秒が 0.0000115740740740741 なのですから、遥かに小さい誤差でしかないです。

 ですので、0になるべき時だけ何とかなっていれば、TMGさんも納得するんだろうなぁと思って手当したものです。

 じゃ、12桁が妥当なのかと言われると、全然説得力のあるものは無いです。

 何せ1秒が 0.0000115740740740741 なんですから、5、6桁でも1秒しか違わないですから、
 そこで四捨五入しても、0になるべき時は0になるし、そうじゃない時も、高々1秒しか狂わないから、実務上OKです。

 桁数を大きくし過ぎると演算誤差を温存してしまうので、そこまでやっちゃダメと言うだけです。

 結論的には6〜12桁なら妥当と言えそうです。

(半平太) 2017/08/09(水) 17:38


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.