【问题标题】:How do you divide a value by 100?你如何将一个值除以 100?
【发布时间】:2020-03-02 18:20:10
【问题描述】:

我是编程新手,不知道如何在 Visual Basic 中对字符串应用除法;专门用来“打折”。

 = Data("discount") /100" 

没有任何作用。

Me.fldRate.txt=lstrText

Me.txtDiscount.Value = Data("discount") /100
If not Data.EOF then 
    Me.txtDiscountedRate.Visible = True
    Me.txtDiscount.Visible = False
    If Data ("discount") > 0 and Data("discountable") <> 0 Then
       blnDiscount = True
       Me.txtDiscount.Visible = True 

有解决办法吗?

提前谢谢你。

【问题讨论】:

  • Data("Discount")要除以100的值是多少?你有任何错误信息吗?如果有,在哪一行?
  • Me.txtDiscount 似乎是一个 TextBox 但它有一个 .Value 属性。您确实应该包括所有信息,例如该控件的类型。
  • 我认为,如果我们在这种方法中看到更多代码,我们可以提供更多帮助。另外,这真的是 VB.Net 还是 VBA?现代 VB.Net 几乎不应该使用 EOF 属性,而 VBA 更有可能检查控件上的 Value 属性。

标签: vb.net


【解决方案1】:

没有足够的信息来确定发生了什么,但如果我不得不猜测,我敢打赌 Data 变量是一个老式 ADO RecordSet 对象。如果为真,则Data("discount").Value 表达式的类型为Object,实际底层类型由SQL 命令确定。此外,我敢打赌这里的具体类型是Integer

小测验:当你将一个整数除以另一个整数时,编程会发生什么?

结果仍然是整数!您会得到整数除法,其中 结果的任何小数部分都将被完全丢弃。 因此,如果您有一张充满整数折扣百分比的表格,当然没有人有过负数或大于100,此语句的结果将始终0

要修复它,我们需要再次了解更多正在发生的事情。但如果这真的是 VB.Net,而不是 VBA 或老式 VB6,我不想这么说,但我会从头开始重写所有数据访问真的! em>) 以摆脱这些旧的经典 ADO API。旧 API 库的存在只是为了与旧代码向后兼容,不应再用于新开发!System.Data 命名空间中查找较新的 ADO.Net API。此外,对于此重写,您应该打开Option Strict,这将迫使您更早地处理此错误。

您希望得到更像这样的代码:

Dim sql As String = "SELECT discount, ... WHERE SomeKeyColum = @KeyField"
Using cn As New SqlConnection("connection string here"), _
      cmd As New SqlCommand(sql, cn)

    cmd.Parameter.Add("@KeyField", SqlDbType.NVarChar, 50).Value = "KeyValue"
    cn.Open()

    Using rdr As SqlDataReader = cmd.ExecuteReader()
        While rdr.Read()
            Dim discount As Decimal = DirectCast(rdr("discount"), Integer) / 100.0D
            '...

        End While
    End Using
End Using

还有一件事。 Microsoft 在最后一个 VB6/vbscript/VBA 版本和 VB.Net 之间更新了他们的 Visual Basic 编程指南,到 explicitly forbid hungarian type prefixes,如 lstrbln 等。这不是强制性的或强制性的,但它是已发布的建议的供应商。在当今的现代代码中,这些前缀往往只适用于 WinForms 控制变量。

【讨论】:

    【解决方案2】:

    您可能必须将字符串转换为数字。使用转换函数 CDbl() 包装您的 Data("discount")。

    Me.txtDiscount.Value = CDbl(Data("discount")) /100
    

    【讨论】:

      【解决方案3】:

      正如其他人所说,这真的取决于Data("Discounts")的数据类型

      ' It's String or varchar
      Dim discount As Double = 0R
      If Double.TryParse(CStr(Data("discount")), discount) Then
      
          ' Conversion passed, use the discount variable
          Me.txtDiscount.Value = (discount / 100.0R).ToString()
      Else
          ' conversion failed...throw error or log
      End If
      
       ' Already a double
      Dim discount2 As Double = Data("discount")
      Me.txtDiscount.Value = (discount2 / 100.0R).ToString()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-11
        • 2013-05-27
        • 1970-01-01
        • 2017-02-14
        • 1970-01-01
        • 2023-03-17
        • 2020-08-28
        • 1970-01-01
        相关资源
        最近更新 更多