0

我正在尝试添加一些会话值,如果任何值具有十进制值,即 12.50,我收到输入字符串格式不正确的错误。?

Dim Res As Integer = Convert.ToInt32(Session("ConsultingFeeAmount")) + Convert.ToInt32(Session("FoodAndBeverageAmount"))
    TotalAmount = Environment.NewLine + "Total Amount: " + Session("ConsultingFeeAmount") + Session("FoodAndBeverageAmount")
    TotalAmount = "Total Amount " + Res.ToString
4

4 回答 4

0

我认为您的问题在于代码Convert.ToInt32。你不能在那里传递一个十进制数。它期待一个整数。这在您的代码中不止一次发生。

于 2013-06-28T19:00:52.440 回答
0

我猜您传递给 Convert.ToInt32 的值不是有效的数字值。确保在使用之前检查会话值是否为空。

if Session("ConsultingFeeAmount") IsNot Nothing Then
  ' Now use this session variable
End If
于 2013-06-28T19:01:20.997 回答
0

使用Decimal 类中的TryParse方法

Dim consultAmt As Decimal
Dim foodAmt As Decimal
Decimal.TryParse(Session("ConsultingFeeAmount"), consultAmt))
Decimal.TryParse(Session("FoodAndBeverageAmount"), foodAmt))

Dim Res As Decimal = consultAmt + foodAmt
TotalAmount = Environment.NewLine & "Total Amount: " & _ 
              consultAmt.ToString() & " " & foodAmt.ToString()
TotalAmount = "Total Amount " & Res.ToString

如果可以将字符串转换为小数,则 Decimal.TryParse 分析输入字符串并使用转换后的值设置第二个参数。如果不是,该方法不会引发任何异常,并且第二个参数更不用说为其默认值。

编辑 OP 说,在最初建议的更改之后,现在它有一条错误消息,上面写着:

从字符串“总金额:12.50 13.00”到类型“双”的转换无效

问题是当 Option Strict 为 OFF 时用于连接字符串的 + 运算符。在这种情况下,VB 编译器会混淆运算符的含义并尝试将两个数值相加。我真的建议使用 Option Strict On 和 Option Explicit On 因为这将迫使您的代码更加精确(没有类型的隐式转换)。当然,如果您进行此更改,则需要对您的应用程序进行广泛的重新测试您可以在此问题/答案链接中阅读有关此问题的信息

于 2013-06-28T19:10:02.457 回答
0

我不知道 vb.net 是否与 C# 不同,但 Session 返回一个对象而不是类型值。您需要将 Session("ConsultingFeeAmount") 转换为小数。

CType(Session("ConsultingFeeAmount"), Decimal)

或者

CType(Session("ConsultingFeeAmount"), Integer)
于 2013-06-28T19:15:44.530 回答