[[20230201105928]] 『小数点第3位を扱う変数のデータ型について』(see) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『小数点第3位を扱う変数のデータ型について』(see)

 '0.001をA1に表示させ、0.001を足していく
 Sub test()
     Dim a As Single

     a = 0.001
     Do Until a = 1

         Range("A1") = a
         a = a + 0.001

     Loop

 End Sub

 小数点第3位を扱う変数を設定するにはどのデータ型なのか調べていて、
 小数点型で、Singleなのかな?と試してみましたが

 どのホームページにも値の例や最小値と最大値が
  負:-3.402823E38 〜 -1.401298E-45
  正:1.401298E-45 〜 3.402823E38
 と書かれていて、
 今回扱いたい「0.001」はNGなのかな…?

 ちなみに、上記のコードは、Singleで問題なく動いてはいるのですが
 A1の数式バーに 0.00100000004749745 という数字が表示され、
 なんだかすっきりしていません…

 Doubleだとセルと数式バーは0.001となるので、こちらを使うのかな…?

 データ型をどのように使うとよいか教えて頂けると助かります

< 使用 Excel:Excel2010、使用 OS:Windows10 >


変数をVariant型で宣言しなければいけませんがDecimal型というものもあります。

 Sub DecimalTest()
   Dim a As Single
   Dim b As Variant
   Dim r As Long
   a = 0.001
   b = CDec(0.001)
   r = 2

   Do Until a >= 1
     Range("A1") = a
     Range("B1") = b
     If a <> b Then
       r = r + 1
      Range("A" & r).Value = a
       Range("B" & r).Value = b
       Range("C" & r).Value = a - b
     End If
     a = a + 0.001
     b = b + CDec(0.001)
   Loop
 End Sub

ご参考までに
(お邪魔します) 2023/02/01(水) 11:34:36


 もともとSingleやDoubleでは小数点以下の計算で誤差が出てくることがある。
 (整数部分では誤差はない)
 で、小数点以下の計算で誤差が出ないCurrency型が用意されている。
 ただし小数点以下4桁までの制限があるが。

 扱える数値の範囲は
 -922,337,203,685,477.5808 から 922,337,203,685,477.5807
 になる。
(ねむねむ) 2023/02/01(水) 16:44:10

 お邪魔しますさん ねむねむさん

 小数点の扱いは注意ですね…
 勉強になりました

 ありがとうございました
(see) 2023/02/02(木) 12:31:05

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.