• ベストアンサー

小数点以下を含む計算でバグが生じてしまいます。

 プログラム中(VBscript)で、データベースから、商品データ(数値)を取り出して、過去のデータから現在のデータまでをどんどん値を引いていって、その経過を表示する、という引き算を繰り返す作業を行っているのですが、途中でバグが出てしまいます。  実際に取り出される数値としては、整数もしくは小数点以下第一位までの数値です。  どのようなバグが発生するかといいますと、たとえば、数値「5.6」から数値「2.4」を引いたら、表示が、「3.1999999999」などと表示されてしまうのです。  どのようにすれば解決されるのでしょうか。 初心者なので的外れな質問かもしれませんが、ご回答よろしくお願いします。

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

  • ベストアンサー
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

表示だけの問題でしたら、最終表示の時に Dim Disp as String Dim Disp_data as Double Disp_Data = 3.1999999999 Disp = Format( Disp_Data, "#,##0.00") で、Dispを表示させれば直ります。 途中の計算結果も合わせるということであれば、 Dim Disp as String Dim Disp_data as Double Disp_Data = 3.1999999999 Disp = Format( Disp_Data, "#,##0.0") Data_Arry(i) = val(Disp) とすれば大丈夫なはずです。 これに四捨五入がからむと、ちょっとややこしくなりますが、数値化けでしたらこれで大丈夫なはずです。 うまくモデファイしてお使いください。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

2進数表記にした時に循環小数になるような数値があると、単純な足 し算や引き算でも誤差が生じます。「丸め誤差」で検索してみると解 説が見つかりますので参照して下さい。 で、最大でも小数点以下1桁までと決まっているのなら、いったん10 倍して整数として演算してから元に戻すようにすれば回避できます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 小数点以下の値を判断したいです

    DBから取得する値が3ならば3と、3.5なら3.5と取得したいです。 この時にint型で取得すると小数点以下が切られてしまいます。 double型で取得すると3.5は3.0となってしまいます。 どうしたらよいのでしょうか? 整数値であればintで小数値を含むならばdoubleで取得するようなロジックにしようかと思っているのですが、小数点以下の値を判別させる方法はありますでしょうか?

  • エクセルで、異なるシートのセルを参照すると、なぜか小数点以下が示される

    他のシートのセルを参照したとき参照するセル値は整数なのに 小数点以下の数字がなぜか現れます。 (1)これはなぜでしょうか?? (2)どのようにすれば、整数の値に改善できるでしょうか? 1.参照するsheet2のセルL3には、=SUM(L7:L39)と式が入っています。 2.値を示すsheet1のセルB10の書式設定の表示形式は    普通にしています。    書式設定の表示形式で、数値にして小数点以下を表示しない    設定にすれば、整数のみになりますが    =MMULT($B$10,$C$10)で    C10にある数字との積をあるセルに表示させると、    小数点を反映した数値になります。  よろしくご解答お願い致します。   

  • 小数点以下しかない数値の表示

    数値を str(数値)で文字列にしているのですが、小数点以下しかない数値の場合 ”.123”のように0が頭につきません。 どのようにしたら良いのでしょうか。もちろん小数点以上の値の場合はそのまま表示したいです。

  • 小数点以下切捨てした上での足し算

    書式設定で小数点以下の桁数0にし、整数での表示にさせています。 しかしそれらを足し算すると結局正確に小数点以下の数値まで 足されてしまいます。そうしないためには?

  • Excelで数値の小数点を揃える方法は?

    Excelの数値データで、小数点以下1桁とか2桁とかの表示にした時、整数の小数点以下を表示しない方法はありますか?しかも、小数点を中心に桁を揃えて。   12.2  300   20.4 こんな感じです。

  • アクセス2003で、数値のプロパティで、小数点以下の表示ができない

    アクセス2003を使っているのですが、テーブル上やフォーム上で、数値書式のフィールド上で、小数点以下の表示ができません。 プロパティで、書式を数値に設定して、小数点表示の設定を「2」に設定したのですが、どうしても、小数点が表示されずに、四捨五入して、整数表示してしまいます。 どこの設定がおかしいのでしょうか? どうやったら、小数点表示できますでしょうか?

  • ACCESS2000で小数点以下を表示したい

    ACCESS2000で小数点以下を表示したい 検診データのうちある異常値の数値だけを表示したいのです. しかもその数値が例えば6.0だったら小数点1桁まで表示したいのです. クエリでIIF関数を使って空白にするか表示するかを設定すると その数値のデータ型が数値型とならずプロパティの書式を0.0としても 効きません. データ作成クエリとしてテーブルに書き出して、レポートのソースを そのテーブルにしてみたのですが、その時点での数値がテキスト型 となってしまい、その都度数値型に変更しなければならず、汎用性が ありません.テーブル作成クエリで作成するテーブルのデータ型をあらかじめ 設定する方法はないでしょうか? それとも他によい方法はないでしょうか? あいにくVBAレベルになると知識がなくさっぱりわかりません。

  • 差し込み印刷で小数点以下がたくさん出て

    お世話になります。 エクセルからワードへの差し込み印刷で、5回分のデータの平均値をフィールド挿入で入れたところ 割り切れないところがあったらしく、以下10位ぐらいまで表示され困っています。 データ元のエクセルの数値(平均値)をラウンドダウン関数などを使って、小数以下1位まで変形しても表示される数値だけは以下一位までにできても、差し込まれてワードの表中では、やはり以下10位まで表示されます。 以下一位にしたセルをコピーして、他の列に値だけコピーしてみましたが、やはり結果は一緒でした。 表示される数値と、計算結果とは異なるのでしょうか? どなたか解決できる方いらっしゃいませんでしょうか? 御回答よろしくお願いいたします。

  • エクセルの小数点以下の表示について

    こんにちは! EXCEL 2003 SP2 を使用しています。ハードはHP製、CPUはCeleronD 2.5Ghz、OSはWindowsXP HOME、搭載メモリ512MB、HDD 80GBです。エクセルで座標値入力を行っていたところ「62361.971」「62361.972」「62361.973」「62361.974」」「62361.975」・・・という数列を記入していたところで、「62361.973」の値を数式バーで見たところ、「62361.9729999999」という表記になります。セルの書式設定の表示形式を数値にし小数点以下の桁数を10桁まで表示させる設定にすると確かに「62361.9729999999」という表示になります。しかし「62361.973」だけがこのような表記になるのはなぜなのでしょうか?数値の入力はパソコンキーボードのテンキーより手入力で行っています。エクセルのバグなんでしょうか?それともエクセルの仕様なのでしょうか?

  • 小数点の引き算が不正確

    みなさまこんばんわです。よろしくお願い申し上げます。 VB.NET 2008でFunctionプロシージャを作っています。 その内容は、Double型の値を与えると、その小数点第一位のみをInteger型で返すというものです。 たとえば、3.142を与えると、1を返します。38.98を与えると、9を返します。 これを次のようにコーディングしました。コメントは、39.9を与えたときの動作です。答えは、9を期待しますよね。 ------------------------------------- Function SyosutenWoKaesu(ByVal NyuuryokuSuuchi As Double) As Integer Dim SyosutenBubun As Double Dim SeisuuBu As Integer SeisuuBu = Fix(NyuuryokuSuuchi) 'Fix関数は、入力数値の整数部を返すので、39をInteger型で返します SyosutenBubun = NyuuryokuSuuchi - CDbl(SeisuuBu) 'データ型をDouble型に変換し、引き算。39.9-39なので、0.9という答えを期待しますが、実際は、0.899999999999999が返ってきます SyosutenBubun = SyosutenBubun * 10 SyosutenWoKaesu = Fix(SyosutenBubun) '10倍した数の整数部なので、8を返します。困ります。 End Function ------------------------------------- なんで 39.9 - 39 が0.9じゃないんでしょうか? しかも、10.9など、少ない数字だと、きちんと演算されます。また、100.9などだと、途中、0.900000000000006などの数値になるんですけど、答えはきちんと9を出力します。 また、小数点第一位が9以外だと、うまくいくんです。 ちなみに、CDbl関数を使わなくても同じでした。また、-演算子の代わりに、Mod演算子(割り算の余りを返す演算子)を使っても全く同じでした。 なんでこんな不正確な演算結果になるんでしょうか? あるいは、別のもっとスマートな方法がありますでしょうか? よろしくお願い申し上げます。