過去ログ

                                Page     703
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼小数点以下の表示がうまくいきません。  のりお 03/2/7(金) 22:37
   ┗Re:小数点以下の表示がうまくいきません。  ハマゾウ 03/2/8(土) 10:03

 ───────────────────────────────────────
 ■題名 : 小数点以下の表示がうまくいきません。
 ■名前 : のりお
 ■日付 : 03/2/7(金) 22:37
 -------------------------------------------------------------------------
   public m as double
public l as double
Sub program()
  m=0.1
  l=0
Do until l>100
  l=l+m
  cells(1,1)=l
Loop
End sub

と打って、0.1刻みで表示していくと、6.0が5.99999となってしまいます。その
後も80が80.00000000001になったりと困っています。round関数のround(l,2)として数合わせしていますが、なぜそうなるのでしょうか?また回避の仕方があれば教えていただけませんでしょうか。宜しくお願いします。
 ───────────────────────────────────────  ■題名 : Re:小数点以下の表示がうまくいきません。  ■名前 : ハマゾウ <hama@mb.town.yatsuo.toyama.jp>  ■日付 : 03/2/8(土) 10:03  ■Web : http://www.cty8.com/nsha3921/Home/index.htm  -------------------------------------------------------------------------
   ▼のりお さん:

Single型やDouble型はケタ落ちや丸め誤差のため誤差が発生します。
Long型を使えば回避できます。コードの中では整数で計算して表示する時に
10で割ればOKです。

Public m As Long
Public l As Long
Sub program()
  m = 1
  l = 0
Do Until l > 1000
  l = l + m
  Cells(1, 1) = l / 10
Loop
End Sub
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 703