-PR-
解決済み

VBの小数点周り

  • 暇なときにでも
  • 質問No.88809
  • 閲覧数491
  • ありがとう数6
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 93% (92/98)

以前から思っていたのですが、VBの小数点ってあやしくないですか?
変な現象を見つけたので、知っている方がいたら教えていただきたいのです。

小数点以下、四捨五入をしようと思い、
c = fix(val(a)+val(b))

という、式に対して、a = 20,b = 76.80
と、入れたところ、c = 1536 となるはずなのですが、返ってきた値は
c = 1535 でした。

fixかけてるのに、値が減ってしまうなんてことがあるのでしょうか??
意味不明な現象に戸惑っております。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル13

ベストアンサー率 46% (643/1383)

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

お礼率 93% (92/98)

すごーい丁寧に教えてくださって、ありがとうございますっ!

小数型は、doubleか、singleがほとんどで、
かれんしー(英語、長いので略・・・)は、
いまいち使い方がわかりませんでしたー。

これを機にいっぱい調べられて、しかも教えていただいて、
すごく勉強になりました!

本当にありがとうございます!!
投稿日時 - 2001-06-12 11:26:16
関連するQ&A
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル11

ベストアンサー率 49% (139/279)

質問が良くわからないのですが a = 20 b = 76.80 であれば、 val(a)+val(b) は、96.8 fixは小数点以下切り捨てなので、96 1535は、どこから出てきた値なのでしょう? なお、四捨五入は、0.5を加算した値に対して、切り捨てをすれば、OKです。 VB6では、Round関数がありますが、日本での四捨五入とはちょっと違います。 ...続きを読む
質問が良くわからないのですが

a = 20
b = 76.80

であれば、

val(a)+val(b)

は、96.8

fixは小数点以下切り捨てなので、96

1535は、どこから出てきた値なのでしょう?

なお、四捨五入は、0.5を加算した値に対して、切り捨てをすれば、OKです。
VB6では、Round関数がありますが、日本での四捨五入とはちょっと違います。
お礼コメント
kirin3

お礼率 93% (92/98)

ありがとうございます!+ごめんなさい
急いでかき間違えました。
val(a) * val(b)
の間違えです~(;;
ほんと、ごめんなさい。

私も、0.5を足したり、0.1をたしたり、formatしてみたり、
あと、roundも使ってみたのですが、小数点二桁の切り捨てって、
いつもうまくいかないんです~(vv;

さっそくの回答、ありがとうございますっ。
とってもうれしかったです!
投稿日時 - 2001-06-11 23:47:35


  • 回答No.3
レベル11

ベストアンサー率 49% (139/279)

なるほど掛け算でしたか。 推測できなくてすいませんでした。 回答はARCさんのとおりですから、私は、VBの誤差について書かれたマイクロソフトのページを紹介しておきます。 ...続きを読む
なるほど掛け算でしたか。
推測できなくてすいませんでした。

回答はARCさんのとおりですから、私は、VBの誤差について書かれたマイクロソフトのページを紹介しておきます。
お礼コメント
kirin3

お礼率 93% (92/98)

こちらこそー(^^;

ほんと、ごめんなさい。++ありがとうございました!
そっか、microsoftに行けばけっこういろんな情報が集まりますよね。
早速見てみました。

さらに詳しく、知識を深められて、よかったです~!!

ありがとうございました。
投稿日時 - 2001-06-12 11:29:15
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ