2009-04-08 9 views
3

VB6にIsDouble()関数はありますか?私が間違っていないと、VB6のdoubleデータ型はSQL Server 2000のfloatに相当します。 あなたのアドバイスは大歓迎です。VB6でIsDouble()?

答えて

6
Function IsDouble(ByVal varValue As Variant) As Boolean 

    Dim dblTest As Double 

    On Error Resume Next 

    dblTest = CDbl(varValue) 

    IsDouble = Err.Number = 0 

End Function 
+0

コードをお寄せいただきありがとうございます。 バックグラウンドを明らかにすると、データベーステーブル(SQL Server 2000)のフィールド(SQL floatデータ型)に挿入するために、テキストファイルの文字列値をチェックする必要があります。 –

+0

CDblが入力として受け入れるものに注意してください。私はそれが後にナンセンス文字を受け入れると思う。 –

+0

心配しないで、私はVal関数を考えていました。しかし、海外のユーザーがいる場合は、これらのユーザーに対してもこれをテストすることをお勧めします。私はCDBlが変換を行うために地域の設定を使用すると思います。 –

0

十分に機能するはずのIsNumeric()関数があります。それがあなたのニーズに不十分な場合は、どのように説明することもできますか?

+0

私は背景を明らかにしましょう、私はフィールドに挿入するために、テキストファイルから来ている文字列値(SQLのfloatデータ型)をチェックする必要がありますデータベーステーブル(SQL Server 2000)の –

+0

IsNumericの唯一の問題は、オーバーフローが許容されることです。これは、大きすぎてfloat型に収まらない数値です。 –

+0

これは正しくありません。Doubleに収まる値だけを受け入れます。 (IEEE標準の8バイトの浮動小数点数) – MarkJ

3

IsNumeric()は、Doublesに適合する値のみを受け入れます。それは地域別に認識されています。つまりフランスの地域設定の場合、小数点記号はコンマです。

私はイミディエイトウィンドウでこれを試しました。

Debug.Print IsNumeric("4e308") 
False 

マニュアルでVB6二​​重の定義は、「VB6ダブル変数は-4.94065645841247E-324する-1.79769313486232E308からの値の範囲のIEEE 64ビット(8バイト)浮動小数点数として格納されています負の値の場合は4.94065645841247E-324から正の値の場合は1.79769313486232E308になります。

私はこれが、オンラインdocsのSQL Serverフロートと同じだと思います。 "-1.79E + 308〜-2.23E-308,0、および2.23E + 308〜1.79E + 308の値を持つ浮動小数点数データ。

10

実際には、Vartype関数を使用する方がずっと優れています。

Private Function IsDouble(ByVal value As Variant) As Boolean 
    IsDouble = (VarType(value) = vbDouble) 
End Function 
1

あなたは作り付けのIsNumeric関数機能を使用することができる代わりに、VB6で利用できる作り付けのIsDouble機能はありません。そうしないと、同じことを達成するために、次のユーザー定義関数を使用することができます。

Function IsDouble(ByVal value As Variant) As Boolean 

    Dim convertedValue As Double 

On Error Goto EH 
    convertedValue = CDbl(value) 
    IsDouble = True 

Exit Function 
    EH: 
     IsDouble = False 
End Function