添加会话变量时,输入字符串的格式不正确

时间:2013-06-28 18:58:52

标签: asp.net vb.net

我正在尝试添加一些会话值,如果任何值有一个十进制值,即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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

if Session("ConsultingFeeAmount") IsNot Nothing Then
  ' Now use this session variable
End If

答案 2 :(得分: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表示,在最初建议的更改后,它会显示一条错误消息:

  

从字符串“Total Amount:12.50 13.00”转换为'Double'类型   无效

问题是+操作符用于在Option Strict为OFF时连接字符串。在这种情况下,VB编译器会混淆运算符的含义,并尝试对两个数值求和。我真的建议使用Option Strict On和Option Explicit On,因为这会强制你的代码更精确(没有类型的隐式转换)。当然,如果您进行此更改,则需要对应用程序进行大量的重新测试 您可以在this question/answer link

中了解此问题

答案 3 :(得分:0)

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

CType(Session("ConsultingFeeAmount"), Decimal)

CType(Session("ConsultingFeeAmount"), Integer)