tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: 桁落ち?
投稿日: 2021/07/23(Fri) 13:42
投稿者M
> > Visual Basic6を使用していて
> > 下記のプログラムが小数点で8.6と出したいのですが
> > 切りのいい数字になってくれません。
>
> Double 型や Single 型は二進小数なので、それは当然ですね。
>
> 1 ÷ 2 や 1 ÷ 4 などであれば、二進小数で有限桁となるため、Double に誤差なく格納できます。
>
> 1÷10 の結果は、十進小数では有限桁で記録できますよね。
> しかし二進小数では循環小数となるため、有限桁では記録できません。
>
> 1 ÷ 3 は、三進小数であれば有限桁で問題なく保持できますが、
> 二進小数や十進小数で保持しようとすると、途中桁で打ち切ることで誤差を含むことになります。
>
> 類似の質問として、こちらも参考にしてみてください。
> http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?no=16610&reno=16609&oya=16609&mode=msgview&page=0
>
>
>
> >  Dim test As Double
> >   test = 368.6 - 360
>
> '二進小数のため、誤差を含む
> Dim testSingle As Single
> testSingle = 368.6! - 360!
>
> '二進小数のため、誤差を含む
> Dim testDouble As Double
> testDouble = 368.6# - 360#
>
> '十進小数のため誤差はないが、小数点以下4桁までしか保持できない
> Dim testCurrency As Currency
> testCurrency = 368.6@ - 360@
>
> '十進小数であり、小数点以下の桁数も多いが、その分パフォーマンスが悪い
> Dim testDeciaml As Variant
> testDeciaml = CDec("368.6") - CDec("360")
>
> '誤差軽減のために十進小数で演算させることが目的なら、
> '計算途中で Single や Double を混入させてはいけません。
> '数値のデータ型を常に意識してコーディングしましょう。
> Debug.Print TypeName(360%)
> Debug.Print TypeName(360&)
> 'Debug.Print TypeName(360^)
> Debug.Print TypeName(360!)
> Debug.Print TypeName(360#)
> Debug.Print TypeName(360@)
> Debug.Print TypeName(CDec("360"))
> 'Debug.Print TypeName(360)
> 'Debug.Print TypeName(360.0)
> Debug.Print TypeName(10 \ 2)
> Debug.Print TypeName(10 / 2)

ありがとうございました。下記で試して見ます。
'十進小数であり、小数点以下の桁数も多いが、その分パフォーマンスが悪い
Dim testDeciaml As Variant
testDeciaml = CDec("368.6") - CDec("360")

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。