2016-05-31 5 views
0

で合計を計算するために計算を使用するためにはどのように表現文字列持つは、ダブルデータ型

dim dt as new datatable 
dim result as double = 0 
result = cdbl(dt.Compute(str)) 

をそして、私はエラーを取得する:

Value is either too large or too small for Type 'Int32'. 

この場合、どのように結果データ型を制御できますか?

解決策:
この機能はWindowsの電卓のように機能します。コードはとても混乱が、それは仕事:)

'input = "999,999,999 x 888,888,888 + 112,365 ÷ 15 − 987,653" 
Public Shared Function strCalc(ByVal input As String) As String 
    If input.Substring(input.Length - 1, 1) = " " Then input = input.Substring(0, input.Length - 3) 
    input = input.Replace("−", "-").Replace("x", "*").Replace("÷", "/").Replace(",", "") 
    Dim temp As Double = 0 
    Dim arr() As String = input.Split(" ") 

    If arr.Length > 1 Then 
     temp = New DataTable().Compute(If(arr(0).Contains("."), arr(0), arr(0) & ".0") & " " & arr(1) & " " & 
             If(arr(2).Contains("."), arr(2), arr(2) & ".0"), "") 
     If arr.Length > 3 Then 
      For i As Integer = 3 To arr.Length - 1 Step 2 
       temp = New DataTable().Compute(temp & " " & arr(i) & " " & 
               If(arr(i + 1).Contains("."), arr(i + 1), arr(i + 1) & ".0"), "") 
      Next 
     End If 
     Return temp 
    End If 
    Return input 
End Function 
+0

まず、あなたはすなわち '薄暗い結果は= CDBL(新しいDataTableに、1行でこれを行うことができます:それは2つのdouble数の乗算として式を考慮するようにランタイムにヒントを与えるには、次のコードを使用してください().Compute(文字列)) '。質問に関しては、私は '999999999.0 'を使うとうまくいくと思います。 – jmcilhinney

+0

私にとっては、compute APIはfilterという名前のパラメータをもう1つ必要としています。あなたのコードはどのようにコンパイルされていますか? – RBT

+0

またはそれ以上のこと:「Dim結果As Double = 999999999R * 999999999R'。 "R"はビジュアル基本の「Double」のタイプ文字です。 – Fabio

答えて

1

ランタイムは、2つの整数値の乗算として、あなたの表現999999999 * 999999999の治療、およびCompute APIの戻り値の型であるオブジェクトとしてそれを返すようにしようとしています。それらの数の乗算の出力は、最大値と交差する非常に大きな値となり、変数intSystem.Int32)のデータ型に格納することができます。

算術オーバーフロー例外が発生します。

dim str as string = "999999999.0 * 999999999.0" 
+1

「999999999.0 * 999999999」または「999999999 * 999999999.0」もOKです。 – Ajay

+0

はい。右@Ajay。実行時は、より精度の高いオペランドに基づいて式をアップグレードします。浮動小数点数は整数型よりも精度が高い。したがって、2つのオペランドのどちらかを浮動小数点にアップグレードすると、式全体が2つの浮動小数点数の乗算としてアップグレードされます。 – RBT

関連する問題