乗数を表すEを表示しないようにするには?


こどもヤンキー  2005-12-09 08:15:36  No: 128725

数値が大きくなると42.374E21みたいなかんじに
勝手に省略してしまうんですけど、Eを表示しないようにする
方法ってありますか?


あっきー  2005-12-09 09:23:41  No: 128726

とりあえず開発環境とそうなるコードを提示してみて


魔界の仮面弁士  2005-12-09 10:44:40  No: 128727

書式を指定して文字列化するために、「Format」を使ってみてください。


こどもヤンキー  2005-12-09 18:05:25  No: 128728

開発環境は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に出力
されるようにしてます。
これでわかりますか?


こどもヤンキー  2005-12-09 18:06:32  No: 128729

コードの最後のBはAの間違いです。すいません。


魔界の仮面弁士  2005-12-09 18:29:05  No: 128730

データ型を常に意識してコードを書いてみてください。
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


こどもヤンキー  2005-12-09 19:35:42  No: 128731

魔界の仮面弁士さん。
無事に作れることができました。
ありがとうございました。


こどもヤンキー  2005-12-09 19:54:48  No: 128732

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)
のとこで「型が一致しません。」
のエラーメッセージが出てきてしまいました。
アドバイスお願いします。


こどもヤンキー  2005-12-09 20:13:40  No: 128733

最後の'Text3.Text = CDbl(Text1.Text) * A
はないと思ってください。


魔界の仮面弁士  2005-12-09 22:17:07  No: 128734

Formatの書式 "#" は、先頭のゼロを表示しません。
代わりに、"0" を用いてみてください。


こどもヤンキー  2005-12-10 00:24:25  No: 128735

B = Format(CDbl(Text1.Text) * A, "##")の部分を
B = Format(CDbl(Text1.Text) * A, "0")に
変えたらエラーは出なくなったんですが
小数点が出なくなりました。
原因わかりますか?


nameless  2005-12-10 00:42:09  No: 128736

B = Format(CDbl(Text1.Text) * A, "#0.####")
かな


こどもヤンキー  2005-12-10 01:41:51  No: 128737

う〜ん。なかなかうまくいかないです(泣)
namelessさんのとおりにやってみたら小数点は
表示されたのですが、
19E-4までは0.0019と正確に表示されて
19E-5からは0.0002
19E-6は0. になってしまいます。
本当は19E-5は0.000019
19E-6は0.0000019
と出るようにしたいのですが・・・。 
アドバイスありましたらよろしくお願いします。


魔界の仮面弁士  2005-12-10 01:44:32  No: 128738

> アドバイスありましたらよろしくお願いします。

先ほども書きましたが、"#" ではなく、"0" を用いてみてください。


こどもヤンキー  2005-12-11 02:41:17  No: 128739

"#" ではなく、"0"というのは
B = Format(CDbl(Text1.Text) * A, "00.0000")
ですか?


KG  2005-12-11 04:05:45  No: 128740

書式を空にして実現できそうなきもしますが

#邪道カナ?|=x=;


Dental  2005-12-11 05:42:27  No: 128741

自分なら、"0.0000" とかにするけれどね(もしくは FormatNumber関数)。

> "00.0000"
整数部が1桁の数値の時に、妙な結果になりそうな気がするけれど、
その書式(整数部が「0」2つ、小数部が「0」4つ)にしたことに、
きちんとした理由があるってのなら、それでよいんじゃない?


こどもヤンキー  2005-12-12 05:52:07  No: 128742

B = Format(CDbl(Text1.Text) * A, "00.0000")
としたときに3E-1なら0.3となるところが0.3000になってしまいます。
さらに、3E-5のときは0.0000になります。おそらくformat関数で
桁数が固定されているからでしょぅ。けど解決策がわかりません。


Dental  2005-12-12 11:46:59  No: 128743

そもそも、有効桁数を何桁にしたいの?

たとえば、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" を自分で取り除いちゃえばいいんじゃない?


nameless  2005-12-12 17:49:04  No: 128744

Format(CDbl(Text1.Text) * A, strFormat)
strFormatを表示する桁数に応じて
作成しましょう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加