• ベストアンサー

Rnd関数って

VBのRnd関数を使って次のようにフォーム上に値を返させたときに疑問が沸いたのですが。 sub イベント() Dim Data As Single Randomize Data = Rnd() Text1.Text = Data Text2.Text = Int(Data * 100) end sub この何回かイベントを実行すると例えば text1  text2 0.367   36 0.782   78 8.591   8 の様に値が返されてきます。 ここで2つ不思議なのが HELPでRnd関数を調べると、0以上1未満の範囲の値を返します。となっているのに、なぜ8.591の様な値が出てくるのか? さらに8.591を100かけて小数点以下切り捨てると859になるはずが、なぜ8になるのか? 理由がわかる方教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

8.591E-02という指数形式の表示になっているのではないでしょうか。 本当の数値は0.08591でちゃんと0~1に入っているはずです。

souta_n
質問者

お礼

もっとテキストボックスを広げて・・・ほっほんとだ そういうことだったのか!指数表示だ!しょうもね~ すんごくはずかし~・・・たったこんだけのことだったのか!ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.4

タイマーコントロールを張って、下のコードをやってみるがヨロシ Private Sub cmdMondai_Click()   Dim Data As Double   Dim strWk  As String      Randomize   Data = Rnd()   Text1.Text = Data   Text2.Text = Round(Data * 100)   Call hogehoge End Sub Private Sub hogehoge()   Dim strWk  As String   Dim strCalc As String   Dim intWk  As Integer   Dim intピリオド As Integer      If Left(Text1, 1) <> "0" Then     intWk = InStr(1, Text1, "E-")     intピリオド = Mid(Text1, intWk + 2)     strCalc = Replace(Left(Text1, intWk - 1), ".", "")     strCalc = "0." & String(intピリオド - 1, "0") & strCalc          strWk = "Text1の値が[" & Text1.Text & "]だから、期待値にならない" & vbCrLf & vbCrLf     strWk = strWk & "[" & Text1.Text & "] という値は、指数を使わずに計算すると、[" & strCalc & "]" & vbCrLf & vbCrLf     strWk = strWk & "指数のついた計算には気を配る必要がある"     MsgBox strWk     Timer1.Enabled = False   End If End Sub Private Sub Form_Load()   Timer1.Interval = 10   Timer1.Enabled = True    End Sub Private Sub Timer1_Timer()   Call cmdMondai_Click End Sub

souta_n
質問者

お礼

ありがとうございました。理由がわかりました。 ところでSubプロシージャ名のhogehogeが妙にはまってしまって笑いが止まりません。どうしよう 今度自分で作る時にこの名前使ってしまいそうです。

すると、全ての回答が全文表示されます。
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

text1の横幅を広げて見ましょう。 隠れていた何かが表示されます。

souta_n
質問者

補足

広げてみました・・・う~ん分からない・・・ ひょっとして私って「とろい」

すると、全ての回答が全文表示されます。
  • 2ch
  • ベストアンサー率51% (64/125)
回答No.1

Dataの方をダブルに汁 100倍値を少数第1位で、四捨五入汁 すると、0~1に収まる

souta_n
質問者

補足

さっそくの解答ありがとうございます。 Private Sub cmdMondai_Click() Dim Data As Double Randomize Data = Rnd() Text1.Text = Data Text2.Text = Round(Data * 100) End Sub とするということでしょうか? やってみましたけど以前との変化はありません。 Rnd関数の戻り値は単精度浮動小数点型なのですが、なぜDoubleにするのですか? 0~1に収めたいのではなく、HELPでは0~1となっているのに1以上の戻り値があるのはなぜか、という疑問なんです。

すると、全ての回答が全文表示されます。

関連するQ&A