VB.NETで数値の小数点以下の桁数を確認するにはどうすればよいですか?VB.NETの数値の小数点以下の桁数
例:ループ内にはif
というステートメントがあり、このステートメントには小数点以下4桁(8.9659)の小数点があるかどうかをチェックしたいと思います。
VB.NETで数値の小数点以下の桁数を確認するにはどうすればよいですか?VB.NETの数値の小数点以下の桁数
例:ループ内にはif
というステートメントがあり、このステートメントには小数点以下4桁(8.9659)の小数点があるかどうかをチェックしたいと思います。
Dim numberAsString As String = myNumber.ToString()
Dim indexOfDecimalPoint As Integer = numberAsString.IndexOf(".")
Dim numberOfDecimals As Integer = _
numberAsString.Substring(indexOfDecimalPoint + 1).Length
これは良い方法ではなく、数値が小数点以下の桁数が多く、指数表記を含む文字列への変換があった場合、不正確な回答になります。上記のコードを次の除算式で試してください:(1/11111111111111111)。文字列の変換は "9E-17"です。結果の答えは17でなければなりません。 "E-"が存在する場合、文字列の最後から正解を抽出できますが、なぜすべてそれは代わりに数学的に行うことができますか?私はこの質問に添付された答えにいくつかのコードを掲示します。 – spinjector
整数値を考慮する同様の方法。 globalizationsについては
Public Function NumberOfDecimalPlaces(ByVal number As Double) As Integer
Dim numberAsString As String = number.ToString()
Dim indexOfDecimalPoint As Integer = numberAsString.IndexOf(".")
If indexOfDecimalPoint = -1 Then ' No decimal point in number
Return 0
Else
Return numberAsString.Substring(indexOfDecimalPoint + 1).Length
End If
End Function
Public Shared Function IsInSignificantDigits(val As Double, sigDigits As Integer)
Dim intVal As Double = val * 10^sigDigits
Return intVal = Int(intVal)
End Function
コードのみの回答ではなく、コメントや説明を追加するとよいでしょう。 – skrrgwasme
...この質問に添付他の回答の
Public Function NumberOfDecimalPlaces(ByVal number As Double) As Integer
Dim numberAsString As String = number.ToString(System.Globalization.CultureInfo.InvariantCulture)
Dim indexOfDecimalPoint As Integer = numberAsString.IndexOf(".")
If (indexOfDecimalPoint = -1) Then ' No decimal point in number
Return 0
Else
Return numberAsString.Substring(indexOfDecimalPoint + 1).Length
End If
End Function
一部は数値を文字列に変換し、その後に「ドット」の文字位置を使用することをお勧め小数点以下桁数のインジケータ。しかし、これは信頼できる方法ではありません。&は、数値が小数点以下が多く、指数表記を含む文字列への変換が含まれていると、不正確な回答になります。
たとえば、式1/11111111111111111(1を17で除算)の場合、文字列変換は「9E-17」です。つまり、結果の答えは17でなければならない5です。 "E-"が存在するときに文字列の終わりから正解を返しますが、代わりに数学的に行うことができるときにすべてを行いますか?
これは私がこれを行うために調理した関数です。これは完璧な解決策ではありません。私は完全にテストしていませんが、うまくいくようです。
Public Function CountOfDecimalPlaces(ByVal inputNumber As Variant) As Integer
'
' This function returns the count of deciml places in a number using simple math and a loop. The
' input variable is of the Variant data type, so this function is versatile enougfh to work with
' any type of input number.
'
CountOfDecimalPlaces = 0 'assign a default value of zero
inputNumber = VBA.CDec(inputNumber) 'convert to Decimal for more working space
inputNumber = inputNumber - VBA.Fix(inputNumber) 'discard the digits left of the decimal
Do While inputNumber <> VBA.Int(inputNumber) 'when input = Int(input), it's done
CountOfDecimalPlaces = CountOfDecimalPlaces + 1 'do the counting
inputNumber = inputNumber * 10 'move the decimal one place to the right
Loop 'repeat until no decimal places left
End Function
「サイクル」とは何ですか?あなたはループを意味しますか?どのデータ型を使用していますか? – Oded
デニスはちょうど私にそれを解決するためのいくつかのアイデアをくれました!とにかくありがとう !はい、私はループを務めます。 – Lumart