パソコン困りごと掲示板

 ◇-?=FLOORを使用して-るるぶ-12/30-15:02(147)-No.434517
   ┣?!Re:=FLOORを使用して...-o6asan-12/30-17:16(144)-No.434533
   ┣?!投稿者削除...-c-koban-12/30-17:33(144)-No.434536
   ┗?!Re:=FLOORを使用して...-独覚-01/04-20:17(21)-No.435114

▲このページのトップに戻る
434517=FLOORを使用してるるぶ 2007/12/30-15:02

メーカー名:PC-KOUBOU パソコン工房
OS名:WindowsVista
パソコン名:21322
ソフト関連:表計算Excel
--
計算で出た時間の10分未満をきり捨てようとしたのですが
a2に18:00、b2に17:00 c2に=a2-b2 答え1:00 
と出た状態で、c3に=FLOOR(C2,"0:10")を使用すると、
0:50となってしまいますなぜ1:00にならないのですか?
よろしくお願いいたします。

▲このページのトップに戻る
434533Re:=FLOORを使用してo6asan 2007/12/30-17:16

記事番号434517へのコメント
もともとPC内では10進数を2進数に変換して計算し,再び10進数に変換して表示します。
しかも無限桁まで扱えるわけではありませんから,桁落ちのため不都合が発生します。
これは,時間の計算に限らず,一般の四捨五入処理でも頻繁に見られる現象です。

さらに,EXCELでは時間の計算方法として,24時間を1として計算しています。
10分は1/144となり,割り切れない値となります。これを丸め処理して表示しているので
除算の絡む式だとどうしても誤差が大きくなります。

=(A2-B2)/TIMEVALUE("0:10")の結果を標準でなく,数値表示させると
5.99999999999999となっています。FLOOR関数では元の数値の倍数で計算しますので
0:50と表示されてしまうわけです。

面倒ですが,
=TIME(HOUR(C2),ROUNDDOWN(MINUTE(C2)/10,0)*10,0)
か,演算結果に影響を与えない数を加えた
=FLOOR(C2+0.0000000001,"0:10")
で処理すれば,期待通りの結果が得られると思います。

▲このページのトップに戻る
434536投稿者削除c-koban 2007/12/30-17:33

記事番号434517へのコメント
投稿者によって消されました。

▲このページのトップに戻る
435114Re:=FLOORを使用して独覚 2008/01/04-20:17

記事番号434517へのコメント
るるぶさんは No.434517「=FLOORを使用して」で書きました。

TEXT関数を使用して以下のようにする方法もあります。

=FLOOR(TEXT(C2,"[h]:mm"),"0:10")

Excelの演算誤差に関しては以下が参考になるかと。

「“達人”芳坂和行氏に学ぶ、エクセル(Excel)「演算誤差」対策講座」
http://pc.nikkeibp.co.jp/pc21/special/gosa/index.shtml