ASP.Net CType无法转换"£;1234.56“;到小数-需要影响的详细列表

ASP.Net CType无法转换"£;1234.56“;到小数-需要影响的详细列表,asp.net,vb.net,Asp.net,Vb.net,这是一个常见的问题,它有几个常见的答案。 我的问题是,它们都不起作用 代码完全是典型的,从CType到十进制,由于全球化设置而失败 Console.write( CType("£1,234.56", Decimal) ) >>> Conversion from string "£1,234.56" to type 'Decimal' is not valid. 我的问题是,在多次尝试修复后,这台特定的计算机没有转换该值 到目前为止,没有特别的绝望顺序: 区域设置。确保他们(英

这是一个常见的问题,它有几个常见的答案。 我的问题是,它们都不起作用

代码完全是典型的,从CType到十进制,由于全球化设置而失败

Console.write( CType("£1,234.56", Decimal) )
>>> Conversion from string "£1,234.56" to type 'Decimal' is not valid.
我的问题是,在多次尝试修复后,这台特定的计算机没有转换该值

到目前为止,没有特别的绝望顺序:

  • 区域设置。确保他们(英国)重新启动
  • IIS,“.NET全球化”,文化设置为不变语言(不变国家)
  • IIS,“.NET全球化”,文化设置为(英国)[en GB]
  • “区域设置”、“管理”选项卡、“复制区域设置”
  • 我还没有尝试:

  • 在web.config中设置 还有什么我可以试试的吗?

    如荷花所述,可以:

    Option Infer On
    Imports System.Globalization
    
    Module Module1
    
        Sub Main()
            Dim s = "£1,234.56"
            Dim d = Decimal.Parse(s, NumberStyles.Currency, New CultureInfo("en-GB"))
            Console.WriteLine(d) ' outputs 1234.56
    
            s = "$1,234.56"
            d = Decimal.Parse(s, NumberStyles.Currency, New CultureInfo("en-US"))
            Console.WriteLine(d) ' outputs 1234.56
    
            If Decimal.TryParse(s, NumberStyles.Currency, New CultureInfo("en-GB"), d) Then
                Console.WriteLine(d)
            Else
                Console.WriteLine("Could not parse.")
            End If
    
            Console.ReadLine()
    
        End Sub
    
    End Module
    
    较差的方法是删除不属于某个数字的所有内容:

    Dim s = "£1,234.56"
    Dim re As New Regex("[^0-9,.]")
    Dim t = re.Replace(s, "")
    Console.WriteLine(CType(t, Decimal)) ' outputs 1234.56
    

    它没有那么好,因为您无法检查货币符号是否是您期望的货币符号。

    您尝试过允许设置不同参数的Decimal.Parse吗?谢谢这些提示。在更改代码之前,我正在环境中寻找一些东西。所以,如果你有什么东西在那边,我错过了给我喊一声。但是如果我们不能解决这个问题,我会按照你的建议修改代码。=)