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