初めまして、hiroと申します。
数値を文字列に変換する方法を教えてください。
例えば1.01E+63というような大きな数値なのですが、
指数の形ではなく、"1010000…"とういう感じで文字列に変換したいのです。
理解が浅く説明がおかしいかも知れません。
どうかよろしくお願いいたします。
うーん。ゴリゴリと文字列処理するぐらいしか思いつかない……。
Public Function ToString(ByVal value As Double) As String
Const FmtLen As Integer = 14
Dim stNum As String
stNum = "+0." & String(FmtLen, "0") & "E+000;-0."
stNum = stNum & String(FmtLen, "0") & "E+000;"
Dim ary() As String
ary = Split(Format$(value, stNum), "E")
Dim pos As Integer
pos = CInt(ary(1))
If pos = 0 Then
ToString = ary(0)
Else
ary(0) = Replace(ary(0), ".", "")
If pos > 0 Then
If Len(ary(0)) - 2 < pos Then
ary(0) = ary(0) & String(pos - Len(ary(0)) + 2, "0")
End If
ToString = Left(ary(0), pos + 2) & "." & Mid(ary(0), pos + 3)
Else
ToString = Left(ary(0), 1) & "0." & String(Abs(pos + 1), "0") & Mid(ary(0), 2)
End If
End If
Do While Right(ToString, 1) = "0"
ToString = Left(ToString, Len(ToString) - 1)
Loop
If Right(ToString, 1) = "." Then
ToString = Left(ToString, Len(ToString) - 1)
End If
If Left(ToString, 1) = "+" Then
ToString = Mid(ToString, 2)
End If
End Function
うーん,VB6なら Format$(1.01E+63, "0") でそれっぽくできました
※限定的に可能だっただけかどうかは,調べてません悪しからず
>> ガッさん
それも考えたのですが、小数部を持つ値(1.01E-63 など)の時のことを
考慮した結果、あのようなゴリゴリのコードになってしまったのです。(^^;
とはいえ、対象となるデータが、小数部の無い
>>> 大きな数値なのですが
に限定されるなら、ガッさんの方法でも十分対応できそうですね。
……ん? もしかしたら、ガッさんの方法を使って、さらに小数部も
指定すれば良いのかな。実験実験。
Public Function ToString(ByVal value As Double) As String
ToString = Format$(value, "0." & String(330, "0"))
'小数部の末尾 0 を取り除く
Do While Right(ToString, 1) = "0"
ToString = Left(ToString, Len(ToString) - 1)
Loop
'末尾が小数点記号のみなら取り除く
If Right(ToString, 1) = "." Then
ToString = Left(ToString, Len(ToString) - 1)
End If
End Function
……結果は NG でした。
1.01E-63 ぐらいなら大丈夫なのですが、1.25E-300 という値になると、
残念ながら、正しく変換されませんでした。
(先に提示したコードでは、1.25E-300 でも変換されたのですけれども)
魔界の仮面弁士さん、ガッさん
勉強させていただきました。ご親切にありがとうございます。
このご恩は忘れません。
| ツイート |
|