【问题标题】:How to use the Compute to calculate the total with Double Datatype如何使用 Compute 计算 Double 数据类型的总数
【发布时间】:2016-05-31 04:36:04
【问题描述】:

我有表达式字符串:

dim str as string = "999999999 * 999999999"

我使用DataTable.Compute来计算:

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

【问题讨论】:

  • 首先,您可以在一行中完成此操作,即Dim result = CDbl(New DataTable().Compute(str))。至于这个问题,我想使用999999999.0 会起作用。
  • 对我来说,计算 API 需要一个名为 filter 的参数。你的代码怎么还能编译?
  • 或者更简单:Dim result As Double = 999999999R * 999999999R。 “R”是 Visual Basic 中 Double 的类型字符

标签: vb.net type-conversion


【解决方案1】:

运行时将您的表达式999999999 * 999999999 视为两个整数值的乘积,并尝试将其作为Compute API 的返回类型的对象返回。这些数字相乘的输出结果是一个非常大的值,该值超过了可以存储在int (System.Int32) 数据类型变量中的最大值。

导致算术溢出异常。要向运行时提供提示,使其将表达式视为两个 double 数字的乘积,请使用以下代码:

dim str as string = "999999999.0 * 999999999.0"

【讨论】:

  • 999999999.0 * 999999999999999999 * 999999999.0 也可以。
  • 是的。对@Ajay。运行时根据操作数以更高的精度升级表达式。浮点数比整数数据类型具有更高的精度。因此,将两个操作数中的任何一个升级为浮点数都会将整个表达式升级为两个浮点数操作数的乘积。
猜你喜欢
  • 2022-12-04
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多