• ベストアンサー

VBの小数点周り

ARCの回答

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

FIXは四捨五入ではなく、切り捨てなので、このようなことになります。 VBに限らず、浮動小数点(「NかけるeのM乗」の形で数を表す方式)は、乗除算の際にある程度の誤差を生じます。 Single型の場合、有効桁数は7桁、Double型で15桁です。 で、今回のケースは、この誤差のせいでFixの内側が1535.99999…になってしまっているのでしょう。 で、これをFix関数で変換すると、.9999の部分が切り捨てられて、1535になってしまうわけです。 解決策ですが、一旦、値を通貨型に変換すると良いです。 Fix(Val(20) * CCur(Val(76.8))) このように書くと、浮動小数点の掛け算ではなく、通貨型の掛け算として扱われるので、計算の誤差が発生しなくなります。 また、変数を宣言するときに、 dim a as Currency, b as Currency のようにしておき、 a=val("20"): b=val("76.80") c=fix(a*b) のようにしても良いです。 小数点以下に厳密さを要求するときは通貨型を使う!! っていうふうに覚えておくと、この手のトラブルを未然に防ぐことが出来ると思います。

kirin3
質問者

お礼

すごーい丁寧に教えてくださって、ありがとうございますっ! 小数型は、doubleか、singleがほとんどで、 かれんしー(英語、長いので略・・・)は、 いまいち使い方がわかりませんでしたー。 これを機にいっぱい調べられて、しかも教えていただいて、 すごく勉強になりました! 本当にありがとうございます!!

関連するQ&A

  • Excel 小数点以下の切捨て方法

    初歩的な質問で申し訳ありません。   A   B     C 1 9.5  2875  =A1*B1 という式で、C1の計算後の値を小数点以下切捨てにしたいのですが、どうすればいいのか教えてください。 今のままでは四捨五入になっています。 Excelの本で調べてROUNDDOWNを使うのかなとは思ったのですが 既にC1には計算式が入っているからか、上手くできません。 やり方はありますでしょうか?教えて下さい。

  • 小数点の四捨五入で分からないことがあります

    例えば、0.230978という値を小数点第4位を四捨五入したら、答えは0.231ですか?それとも0.2310が答えですか? また、0.8という値を小数点第1位を四捨五入したら、答えは1.0ですか?それとも1ですか? よろしくお願いします。

  • エクセル2010 小数点を切り捨てたい!

    少し前に同じ質問をしたのですが、ミスがあったのでもう一度投稿します。すみません、、 A1に2.54という数字があるとしたらB1に2.5を入れたいです。小数点第2は四捨五入します。 四捨五入した数字を使ってまた別の計算をしたいのですが、このときに2.54ではなく2.5の数字を使います。なので、四捨五入した数字を表示するだけではなく2.5という数字に変えたいです。 C1に2.5があったら、B1+C1=5.0となるようにしたいです。 できれば数式を入力して解決したいですが、超簡単なマクロでしたらわかりますのでマクロでも問題ありません。もし初心者には理解が難しいマクロでしたら簡単な解説をつけていただけると超助かります。 またマクロで回答いただいた場合はいろいろと質問させていただくかもしれませんがよろしくお願いします。

  • 小数点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を使っても構いません。ちなみにこれは木材の材積計算に使用する目的です。 よろしくお願いします。

  • エクセルの計算方法、小数点以下を入れない

    エクセルで表を作っています。 A÷Bで計算した数字は小数点になりますが 表示は四捨五入にしています。 例 10,828÷500=21.65 →22%  次の式で、この22%を使いたいのですが どうしても、21,65が計算されてしまいます。 どうしたら良いでしょうか、よろしくお願いします。

  • 小数点を整数型に変換

    ・8.7  ・14.5 ・3.456 などのデータがあり、この値を四捨五入 などをせずに 「整数2桁 + 小数5桁」に変換したいのですが、String.Formatなどで行うと意図した値になりません。 ・8.7 ⇒ 87.00000 ・14.5 ⇒ 14.50000 ・3.456 ⇒ 34.56000 何か良い方法がありましたら、アドバイスを頂けないでしょうか。 言語:C# VisualStudio 2008 以上、よろしくお願い致します。

  • Javaの小数点について

    Q = Integer.parseInt(args[0]); A = Q % 5; if ( A == 0 ) { System.out.print( ( Q + 2 ) / 3 ); } 5の倍数の場合は、 入力された値に2を足した値を3で割った値 を表示したい ( 表示するのは小数点第2位までで、小数点第3位を四捨五入したい) というプログラムなのですが小数点の出し方が解りません。 どうやればよいのでしょうか? 「D:\Work>java test 5  演算結果は 2.33 です」 上記のように表示させたいのですがよくわかりません。 申し訳ないですが教えてください。

    • ベストアンサー
    • Java
  • Excelで小数点以下を切り捨てて表示するには?

    こんにちは。 ちょっと急ぎで知りたいのですが、Excel2000で計算式を入力したところ、 自動的に小数点以下が四捨五入されて表示されます。 小数点以下は、切り捨てて表示もしないようにしたいのですが、 どのようにすればよいのでしょうか? 基本的なことですみません・・・ 具体的には・・・ A1に 48.85 B2に 250 C3に =SUM(A1*B1) と入力してあります。 C3は現在、12,213と表示されていますが、 12,212にしたいのです。 できればC列すべてそのように設定したいのですが・・・ よろしくお願い致します。

  • 小数の割り算と概数に関しての質問です。

    小数の割り算と概数に関しての質問です。 実際に割り算する前の数字のまるめ方がよくわかりません。 たとえば算数、数学の問題で、世界の人口に対する日本の人口の割合を百分率で求めるときに、上から2ケタの概数で求める場合には、9ケタ÷10ケタを計算する前に割る数と割られる数を四捨五入して、上から2ケタの概数にしてから計算しますよね。 しかし、小数第一位を四捨五入して整数で答えなさいと出題された場合にはそのまま割り算をする必要があるのでしょうか。 あるいは上から何ケタ目かを四捨五入してから計算すべきなのでしょうか。 上記の問題を言い換えてみます。 m桁の自然数Aとn桁の自然数Bがある。 A÷Bの小数第三位を四捨五入してできた数をCとする。 Aの上からp桁目を四捨五入した数をA’、Bの上からp桁目をB’とする。 A’÷B’の小数第三位を四捨五入してできた数をC’とする。 CとC’が等しいとき、pの最小値を調べよ、またはm、nを用いて表せ。 CとC’が完全に等しい必要は本当はないのかもしれません。 慣用としてこのような計算をする場合には誤差が入ってもよいとされているのかもしれません。 答えがあるかどうかも分かりませんが、上の例題の場合ではなく、一般的な答えが知りたいです。

  • Excel97小数点以下の表示

    いつもお世話になってます。 小数点以下の表示についてご存知の方がいらしたら教えてください。 x=round(a/b,0)とします。 0.5>x>0 の四捨五入して0になる場合は0を表示させたいのですが x=0 のときは値を表示させたくないときはどのような書式設定をすればよいのでしょうか。よろしくお願いします。