計算式で間違った金額が表示される

このQ&Aのポイント
  • 金額計算表には利用場所、利用時刻、利用時間、利用人数、単価、金額、区分の項目がありますが、利用時間が1:00で単価を630と入力したときに金額に629と表示されます。
  • Fのセルには、個室が小または個室が中の場合は利用時間×利用人数×単価、会員個人または一般個人の場合は利用時間×利用人数×24、それ以外の場合は利用時間×24を計算する式が入力されています。
  • この式では利用時間が1:00の場合に誤った金額が表示されてしまいます。正しい計算式を確認してください。
回答を見る
  • ベストアンサー

計算式で間違った金額が表示される

A       B       C       D       E    F     G 利用場所  利用時刻  利用時間  利用人数  単価  金額  区分 このような項目を並べた金額計算表がありまして、実用していたのですが、使ってるうちに不具合が発生しました。 利用時間が1:00で単価を630と入力したとき金額に629と表示されたんです。 Fのセルには =IF(OR(A1="個室小",A1="個室中"),D1*E1,IF(OR(G1="会員個人",G1="一般個人"),INT(C1*D1*E1*24),INT(C1*E1*24))) と式を入力してるんですが、これではダメなんでしょうか?

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

  • ベストアンサー
  • yumitsuki
  • ベストアンサー率52% (167/321)
回答No.1

コンピュータは2進法で計算するため、特に小数点以下の数値において、10進法とは誤差が生じてしまう場合があります。例えば、630となるはずのところが、629.99999999…となってしまう、などです。 そして、関数「INT()」は、小数点以下を切り捨ててしまいます。ここで、629.99999999…は629になってしまいます。恐らくは、これが原因ではないかと推察致します。 対処法としましては、関数「INT()」の代わりに、四捨五入の関数「ROUND()」を使われてはいかがでしょうか。つまり、例えば、「INT(C1*D1*E1*24)」の代わりに「ROUND(C1*D1*E1*24,0.1)」とすれば、629.99999999…も630になります。

jhggjkhkh
質問者

お礼

どうもありがとうございました。問題が解決しました。 勉強になりました。

関連するQ&A

  • 金額計算表で間違った金額が表示される

    A       B       C       D       E    F     G 利用場所  利用時刻  利用時間  利用人数  単価  金額  区分 このような項目を並べた金額計算表がありまして、実用していたのですが、使ってるうちに不具合が発生しました。 利用時間が1:00で単価を630と入力したとき金額に629と表示されたんです。 Fのセルには =IF(OR(A1="個室小",A1="個室中"),D1*E1,IF(OR(G1="会員個人",G1="一般個人"),INT(C1*D1*E1*24),INT(C1*E1*24))) と式を入力してるんですが、これではダメなんでしょうか? 先ほど回答をいただきINTをROUNDに替え =IF(OR(A1="個室小",A1="個室中"),D1*E1,IF(OR(G1="会員個人",G1="一般個人"),ROUND(C1*D1*E1*24,0.1),ROUND(C1*E1*24,0.1)))として解消したと思い締め切ってしまったんですが、また問題が・・・。 単価が525円で利用時間が1:30のとき、787.5円が788円になってしまいました。店のシステム上、少数点は切り捨てで787円にしたいんです。どうしたらいいですか?お願いします。

  • 金額計算で間違った金額が表示される2

    A       B       C       D       E    F     G 利用場所  利用時刻  利用時間  利用人数  単価  金額  区分 このような項目を並べた金額計算表がありまして、実用していたのですが、使ってるうちに不具合が発生しました。 利用時間が1:00で単価を630と入力したとき金額に629と表示されたんです。 Fのセルには =IF(OR(A1="個室小",A1="個室中"),D1*E1,IF(OR(G1="会員個人",G1="一般個人"),INT(C1*D1*E1*24),INT(C1*E1*24))) と式を入力してるんですが、これではダメなんでしょうか? 先ほど回答をいただき締め切ってしまったんですが、また問題が・・・。 単価が525円で利用時間が1:30のとき、787.5円が788円になってしまいました。店のシステム上、少数点は切り捨てで787円にしたいんです。どうしたらいいですか?お願いします。

  • IF関数の複数条件の仕方を教えてください

    いつもお世話になってます。 金額計算の表を作成しています。 A      B      C   D   E   F 使用場所 利用時間 人数 単価 料金 区分 といった具合に項目がありまして 料金のセルに=IF(OR(F2="個人",F2="会員個人"),B2*C2*D2,B2*D2)と入力し、団体、会員団体の場合は【利用時間*単価】 個人、会員個人の場合は【利用時間*人数*単価】と入力しています。 そこで使用場所がシャワー室と入力された場合、個人も団体も無視して【人数*単価】という式を最優先させる方法を教えていただけないでしょうか?

  • エクセルのIF関数をつかい=が0なら非表示とした場合の矛盾

    はじめまして。どうぞお力をおかしください。 [質問] エクセルで人材派遣の見積書を作成しています 項目は、 ・A-数量(派遣人数や勤務時間) ・B-単位(人や時間数) ・C-単価(1人や1時間あたりの単価) ・D-小計(1日分の合計) ・E-数量(勤務日数) ・F-単位(日) ・G-合計(ひとつの現場の人件費合計) ★EFGには何も入力しないこともあります となります。 現在以下のように入力しております。 (1)D=A×C→D=IF(A1*C1=0,"",A1*C1) (2)G=D×E→G=IF(D1*E1=0,"",D1*E1) しかし!!これではひとつめのDには希望通り何も入力されていないときには空白で数値がある場合のみ数値が計算されているのですが、EFGに何も入力していないとGには空白となり、Dの小計の金額が表示されないのです。 どうしたらEFG未入力の際にはDの数値が表示されるようになるのでしょうか?? どうかお助けください。お願いいたします

  • エクセルの時間計算について

    以前に皆さんの回答を参考にして、大変便利に利用させていただいていますが、もっと完璧なものにバージョンアップしたいので、よろしくお願いします。 B4に開始時間、C4に終了時間を入力した場合、5時から22時まではD4に表示させ、22時から5時まではE4に表示させています。 例えば、 B4に19:20、C4に20:30でD4に1:10。 B4に22:20、C4に23:30でE4に1:10。 B4に21:20、C4に22:30でD4に0:40、E4に0:30。 式は、 D4に=IF(OR(B4="",C4=""),"",IF(OR(B4>=$D$1,B4<$C$1),"",IF(OR(C4>$D$1,C4<=$C$1),$D$1,C4)-B4)) E4に=IF(OR(B4="",C4=""),"",IF(OR(B4>=$D$1,B4<$C$1),"",IF(OR(C4>$D$1,C4<=$C$1),$D$1,C4)-B4)) です。 これだと、B4に4:20、C4に5:30でD4に0:30、E4に0:40になりません。 また、I4に1を入力することによって、F4とG4に表示させたいのですが、どうしたらいいでしょうか。 よろしくお願いします。

  • エクセルで時間計算(再質問)

    本日の朝に質問させていただいたのですが、質問が分かりにくかったため再度質問させていただきます。 以前に皆さんの回答を参考にして、大変便利に利用させていただいていますが、もっと完璧なものにバージョンアップしたいので、よろしくお願いします。 B4に開始時間、C4に終了時間を入力した場合、5時から22時まではD4に表示させ、22時から5時まではE4に表示させています。 例えば、 B4に19:20、C4に20:30でD4に1:10。 B4に22:20、C4に23:30でE4に1:10。 B4に21:20、C4に22:30でD4に0:40、E4に0:30。 現在使っている式は、 C1に5:00、D1に22:00を入力。 D4に=IF(OR(B4="",C4=""),"",IF(OR(B4>=$D$1,B4<$C$1),"",IF(OR(C4>$D$1,C4<=$C$1),$D$1,C4)-B4)) E4に=IF(OR(B4="",C4=""),"",IF(OR(B4>=$D$1,B4<$C$1),"",IF(OR(C4>$D$1,C4<=$C$1),$D$1,C4)-B4)) です。 これだと、B4に4:20、C4に5:30でD4に0:30、E4に0:40になりません。 また、I4に1を入力することによって、D4に表示させないでF4に、E4に表示させないでG4に表示させたいのですが、どうしたらいいでしょうか。 よろしくお願いします。

  • 【関数】エクセルでの時間の計算

    いつもお世話になっております。 エクセルでの時間の計算に関する質問です。 下記のような30行ぐらいの表があり、A,B,C,D列は手打ち、E,F,G列は関数が入力されています。 この場合D2は空白ですが、両方に15ずつ入力されている場合もあります。  A  B  C D    E     F        G 8:00 8:30 30 _ =(B2-A2)*24 =(C2+D2)/60 =IF(E2=F2,"〇","×") 結果、判定をしたいG列が〇になったり×になったりしますが、それがなぜなのか教えてください。

  • エクセルの計算

    科目が2つある表を作っています(消耗品と修繕費)   A     B          C   D   E  F   G 1 業者名 備品or修繕費 商品名 単価 数量 金額 消費税 2 3 Bは備品だったり修繕費だったりバラバラです。 表の一番下に(備品の金額合計)と(備品の消費税合計)とその両方の合計を表示させたい(修繕費も同様) これを関数を利用して自動的に合計が入るようにしたいのですが可能でしょうか?出来るとすれば、どの関数を使うのでしょうか?その式も教えて頂けると助かります。

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • エクセルで優先的に表示

    いつもご丁寧に教えていただき本当に感謝しております。 また行き詰ってしまったのでお分かりになる方、よろしくお願いします。 まず、L1~L5に商品コードとして“1~5”、M1~M5に商品名として“花1~花5”の表があります。 C2に商品コードを入力するとD2に商品名がでるように、D2に=VLOOKUP(C2,$L$1:$M$5,2,FALSE)と関数を入れてます。E2には“×”or“空白”が入ります。 同様にF2に商品コード、G2に商品名がでるようにG2に=IF(F2="","",VLOOKUP(F2,$L$1:$M$5,2,FALSE))といれ、もう1つ同様に、 I2に商品コード、J2に商品名がでるようにIFとVLOOKUP関数を入れてます。H2とK2には“×”or“空白”が入ります。 この商品コードの入力はC2→F2→I2の順に入力していき、F2からやI2からの途中入力はないものとします。 ・・・・で,A2とB2の商品名を下記の例のように表示させるにはどうしたらいいですか? 例)D2に商品名がある場合→A2にD2の商品名、B2は空白 例)D2とG2に商品名がある場合→A2にD2の商品名、B2にG2の商品名 例)D2に商品名があるが、E2に“×”、G2に商品名がある場合→A2にG2の商品名、B2は空白 例)D2、G2、J2に商品名があるが、E2、H2に“×”がある場合→A2にJ2の商品番号、B2は空白 わかりにくい説明で申し訳ございません。

専門家に質問してみよう