【问题标题】:decimal try parse in inline code内联代码中的十进制tryparse
【发布时间】:2014-01-22 20:20:31
【问题描述】:

如何在下面的代码行中使用 Decimal.TryParse 如果值为 null 或为空,那么在 VB.NET 的内联编码中它应该为 0

<input type="checkbox" name="ticket" id="ticket<%=y%>" title="<%=(CDec(Decimal.TryParse(late_fee)) + CDec(rs("ticket_amount")) + CDec(rs("nsf_fee")))-(CDec(rsp("TICKET_PAYMENTS")) + CDec(rsp("LATEFEE_PAYMENTS")) + CDec(rsp("NSFFEE_PAYMENTS")))%>" value="<%=rs("ticket_id")%>" checked="checked" onclick="doMath();"/>

谢谢你的建议

【问题讨论】:

  • 您不能内联TryParse 方法,因为您需要首先声明将从TryParse 方法返回的变量。您要么必须使用多行,要么创建一个返回它的方法。
  • 您能否提供任何我可以使用的示例来更新我的问题
  • 用这样的大公式。我会将这段代码放在一个函数中,或者在数据库端进行。

标签: vb.net inline-code


【解决方案1】:

TryParse 根据转换是否成功返回真或假。

尝试:

double number;
Double.TryParse(late_fee, out number);

number: "当此方法返回时,如果转换成功,则包含与late_fee参数等效的双精度浮点数,如果转换失败则为零"

使用“数字”

 (CDec(number) + CDec(rs("ticket_amount")) + CDec(rs("nsf_fee")))-(CDec(rsp("TICKET_PAYMENTS")) + CDec(rsp("LATEFEE_PAYMENTS")) + CDec(rsp("NSFFEE_PAYMENTS")))

【讨论】:

    【解决方案2】:

    您不能内联TryParse 方法,因为您需要首先声明将从TryParse 方法返回的变量。您要么必须使用多行,要么创建一个返回它的方法。

    我还是建议使用变量,因为这会使您的代码更具可读性,这是最重要的。

    但是,为了它的价值,你可以做一个返回小数或默认值的扩展:

    Module StringExtensions
    
        <Runtime.CompilerServices.Extension()>
        Public Function ParseDecimal(ByVal aString As String, defValue As Decimal, Optional culture As Globalization.CultureInfo = Nothing) As Decimal
            Dim retVal As Decimal = defValue
            If culture Is Nothing Then culture = Globalization.CultureInfo.CurrentCulture
            Decimal.TryParse(aString, Globalization.NumberStyles.Any, culture, retVal)
            Return retVal
        End Function
    
    End Module
    

    即使我仍然会使用多行和变量来增加可读性,你也可以内联计算。

    Dim lateFee As Decimal = late_fee.ParseDecimal(0)  ' and the other variables ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2014-01-15
      • 2018-10-13
      • 1970-01-01
      • 2016-04-17
      • 2017-09-06
      相关资源
      最近更新 更多