-1

テキスト ボックスの出力に有効数字を 5 桁だけにしたい。これを行う VB 関数を教えてください。ありがとう

4

3 に答える 3

1

Validating イベントを使用して、入力した数値を再フォーマットします。入力エラーをユーザーに報告するには、ErrorProvider を使用する必要があります。

固定の有効桁数を取得するには、入力された値に基づいて、数値の書式設定文字列を動的に作成する必要があります。Math.Log10() を使用して、分数に必要な桁数を計算できます。このような:

Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
    Dim value As Double
    If Not Double.TryParse(TextBox1.Text, value) Then
        ErrorProvider1.SetError(TextBox1, "Please enter a valid number")
        TextBox1.SelectAll()
    Else
        ErrorProvider1.SetError(TextBox1, "")
        Dim intDigits As Integer = 0
        If value <> 0 Then intDigits = CInt(Math.Truncate(Math.Log10(Math.Abs(value))))
        If intDigits >= 0 Then intDigits += 1
        Dim fracDigits = 5 - intDigits
        If fracDigits < 0 Then fracDigits = 0
        Dim format = "F" + fracDigits.ToString()
        TextBox1.Text = value.ToString(format)
    End If
End Sub
于 2012-12-25T18:00:43.347 に答える
0

まず、みなさん、メリークリスマス、ありがとうございます。ハンス・パッサンの返信を回答としてマークします

この質問をする前に考えました。私がこの質問をしたのは、私のためにプログラムを実行してくれる人を見つけようとしていたからではありません。(でもハンス・パッサンには本当に感謝しています)。組み込み関数があると思っていましたが、ROUNDTO と呼ばれる可能性があります。関数が存在する場合、名前を知りたかったので質問を投稿しました。

私のアプリケーションでは、私はそれをしました

    Function roundTo(ByVal num As Double) As Double
    If num >= 10000 Then
        Return Math.Round(num)
    Else
        Dim tempnum = num
        Dim counter = 0
        Do
            tempnum = tempnum * 10
            counter = counter + 1
        Loop While tempnum / 10000 < 1
        Return Math.Round(num * 10 ^ (counter)) / (10 ^ (counter))
    End If
End Function
于 2012-12-25T21:31:43.293 に答える