2011-10-30 58 views
4

VB.NETで数値の小数点以下の桁数を確認するにはどうすればよいですか?VB.NETの数値の小数点以下の桁数

例:ループ内にはifというステートメントがあり、このステートメントには小数点以下4桁(8.9659)の小数点があるかどうかをチェックしたいと思います。

+0

「サイクル」とは何ですか?あなたはループを意味しますか?どのデータ型を使用していますか? – Oded

+0

デニスはちょうど私にそれを解決するためのいくつかのアイデアをくれました!とにかくありがとう !はい、私はループを務めます。 – Lumart

答えて

5
Dim numberAsString As String = myNumber.ToString() 
Dim indexOfDecimalPoint As Integer = numberAsString.IndexOf(".") 
Dim numberOfDecimals As Integer = _ 
    numberAsString.Substring(indexOfDecimalPoint + 1).Length 
+1

これは良い方法ではなく、数値が小数点以下の桁数が多く、指数表記を含む文字列への変換があった場合、不正確な回答になります。上記のコードを次の除算式で試してください:(1/11111111111111111)。文字列の変換は "9E-17"です。結果の答えは17でなければなりません。 "E-"が存在する場合、文字列の最後から正解を抽出できますが、なぜすべてそれは代わりに数学的に行うことができますか?私はこの質問に添付された答えにいくつかのコードを掲示します。 – spinjector

4

整数値を考慮する同様の方法。 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 
2
Public Shared Function IsInSignificantDigits(val As Double, sigDigits As Integer) 
    Dim intVal As Double = val * 10^sigDigits 
    Return intVal = Int(intVal) 
    End Function 
+2

コードのみの回答ではなく、コメントや説明を追加するとよいでしょう。 – skrrgwasme

0

...この質問に添付他の回答の

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 
0

一部は数値を文字列に変換し、その後に「ドット」の文字位置を使用することをお勧め小数点以下桁数のインジケータ。しかし、これは信頼できる方法ではありません。&は、数値が小数点以下が多く、指数表記を含む文字列への変換が含まれていると、不正確な回答になります。

たとえば、式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 
関連する問題