|
こんばんは。
10進数の小数を2進数に変換するコードです。
今朝、簡単だろうと思って投稿したら大きいバグがあったので
再送です。
標準モジュールに
'====================================================================
Sub main()
Dim idx As Long
With ActiveSheet
.Range("a1:b1").Value = Array("10進数", "2進数")
For idx = 1 To 99
.Cells(idx + 1, 1).Value = "'0." & Format(idx, "00")
.Cells(idx + 1, 2).Value = "'" & cnvbin_for_frac(.Cells(idx + 1, 1).Value, 20)
Next
End With
End Sub
'=========================================================================
Function cnvbin_for_frac(myvalue As Variant, Optional keta As Long = 5) As String
'10進数の小数を2進数に変換する
' input ---myvalue 1>myvalue>=0の小数に限る
' keta------変換桁数 省略時は、5桁
'Out-------cnvbin_for_frac 二進数に変換した小数 文字列です
Dim sval As String
Dim lval As Long
Dim dem As Long
Dim flen As Long
sval = Trim(Split(CStr(myvalue), ".")(1))
lval = CLng(Split(CStr(myvalue), ".")(1))
flen = Len(sval)
For dem = 1 To keta
lval = lval * 2
If lval >= 10 ^ flen Then
cnvbin_for_frac = cnvbin_for_frac & "1"
lval = lval - 10 ^ (flen)
Else
cnvbin_for_frac = cnvbin_for_frac & "0"
End If
If lval = 0 Then Exit For
Next
cnvbin_for_frac = "0." & cnvbin_for_frac
End Function
小数の誤差を探るときの参考にして下さい。
|
|