数値が大きくなると42.374E21みたいなかんじに
勝手に省略してしまうんですけど、Eを表示しないようにする
方法ってありますか?
とりあえず開発環境とそうなるコードを提示してみて
書式を指定して文字列化するために、「Format」を使ってみてください。
開発環境はVB6.0です。
Dim A As Double
Dim i As Integer
i = 0
A = 1
Do Until i = CInt(Text2.Text)
A = A * 10
i = i + 1
Loop
Text3.Text = Text1.Text * B
(例)432424.3414 E 23 = 答え
↑ ↑ ↑
Text1 Text2 Text3
Text1に数値、Text2に乗数の数値を入力したら答えがText3に出力
されるようにしてます。
これでわかりますか?
コードの最後のBはAの間違いです。すいません。
データ型を常に意識してコードを書いてみてください。
Textプロパティは、文字列(String)型です。数値ではありません。
だからこそ、TextBoxの値を数値に変えるために、
> Do Until i = CInt(Text2.Text)
のように、型変換関数を使っているのですよね。
にも関わらず、
> Text3.Text = Text1.Text * B
こちらでは型変換が行われていません。こちらも型を合わせましょう。
まず、B と掛け算する前に、Text1.Text を数値型に変換する必要がありますね。
CDbl や CDec や CDbl などを用いて、Text1.Text を変換してください。
そして、演算した結果を Text3.Text に表示するために、今度はまた、
数値から文字列への変換が必要になります。この時の変換では、
CStr関数ではなく、先に回答した「Format関数」を使うように
してみてください。これで、"E" を使った指数表示を回避できます。
それを B
魔界の仮面弁士さん。
無事に作れることができました。
ありがとうございました。
Private Sub Command1_Click()
Dim A As Double
Dim B As String
Dim i As Integer
i = 0
A = 1
If Left(Text2.Text, 1) = "-" Then
Do Until i = CInt(Text2.Text)
A = A / 10
i = i - 1
Loop
Else
Do Until i = CInt(Text2.Text)
A = A * 10
i = i + 1
Loop
End If
'数値から文字列への変換
B = Format(CDbl(Text1.Text) * A, "##")
Text3.Text = B
Text4.Text = CDbl(B)
'Text3.Text = CDbl(Text1.Text) * A
End Sub
Eの数値が+のときはできたので
-のときも使えるようにしたんですけど
値が小さすぎるのかわかりませんが
「'数値から文字列への変換」
の次の行のとこでBに空文字列がはいってしまい、
Text4.Text = CDbl(B)
のとこで「型が一致しません。」
のエラーメッセージが出てきてしまいました。
アドバイスお願いします。
最後の'Text3.Text = CDbl(Text1.Text) * A
はないと思ってください。
Formatの書式 "#" は、先頭のゼロを表示しません。
代わりに、"0" を用いてみてください。
B = Format(CDbl(Text1.Text) * A, "##")の部分を
B = Format(CDbl(Text1.Text) * A, "0")に
変えたらエラーは出なくなったんですが
小数点が出なくなりました。
原因わかりますか?
B = Format(CDbl(Text1.Text) * A, "#0.####")
かな
う〜ん。なかなかうまくいかないです(泣)
namelessさんのとおりにやってみたら小数点は
表示されたのですが、
19E-4までは0.0019と正確に表示されて
19E-5からは0.0002
19E-6は0. になってしまいます。
本当は19E-5は0.000019
19E-6は0.0000019
と出るようにしたいのですが・・・。
アドバイスありましたらよろしくお願いします。
> アドバイスありましたらよろしくお願いします。
先ほども書きましたが、"#" ではなく、"0" を用いてみてください。
"#" ではなく、"0"というのは
B = Format(CDbl(Text1.Text) * A, "00.0000")
ですか?
書式を空にして実現できそうなきもしますが
#邪道カナ?|=x=;
自分なら、"0.0000" とかにするけれどね(もしくは FormatNumber関数)。
> "00.0000"
整数部が1桁の数値の時に、妙な結果になりそうな気がするけれど、
その書式(整数部が「0」2つ、小数部が「0」4つ)にしたことに、
きちんとした理由があるってのなら、それでよいんじゃない?
B = Format(CDbl(Text1.Text) * A, "00.0000")
としたときに3E-1なら0.3となるところが0.3000になってしまいます。
さらに、3E-5のときは0.0000になります。おそらくformat関数で
桁数が固定されているからでしょぅ。けど解決策がわかりません。
そもそも、有効桁数を何桁にしたいの?
たとえば、2E-120 の時は、0 を 100個以上書くつもりなのかな?
そんなの読みにくいだけだと思うんだけどな。
あるいは、1÷3 の時はどうする? 0.3333333…となるわけだけど、
無限に桁数を表示させるなんてのは無理だよね。だから表示前に、
最大桁数を自分で定義しておく必要があるって事になるわけ。
(それよりも小さな値は、近似値に丸めて表示する)
それに、0.3000 と 0.3 って、結局は同じ値だよね?
あとは、有効桁数を意識するかどうかの問題なんだろうけどさ。
http://sun.econ.seikei.ac.jp/~kawagoe/marumeru.htm
どうしても小数以下の末尾に0が付くのが嫌だってんなら、Format で
文字列にしたあと、Left関数とかRight関数とかを使って、
末尾の "0" を自分で取り除いちゃえばいいんじゃない?
Format(CDbl(Text1.Text) * A, strFormat)
strFormatを表示する桁数に応じて
作成しましょう。
ツイート | ![]() |