Обмен валюты CultureInfo между Саудовской Аравией и США - PullRequest
0 голосов
/ 05 мая 2018

У меня есть что-то вроде:

price_2.Text = CDbl (price_2.Text) .ToString ("C", current_culture)

Issue / Workflow:

И давайте предположим, что начальная цена указана в долларах, поэтому предположим, что price_2.Text составляет $ 5,99. А при нажатии кнопки current_culture изменится на ar-SA. Таким образом, он преобразует ($ 5,99) в (5,99), теперь, когда он равен (5,99), и я изменяю current_culture на en-US, это приведет к сбою, так как CDbl не может преобразовать этот символ после 5,99 ريال в двойной.

Любые идеи, как мы можем конвертировать из CultureInfo для валюты?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Не очень знаком с глобализацией, но это сработало для меня. Просто возьмите число перед форматированием, и вы сможете применить культуру к самому числу.

Private dbl As Double
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        dbl =CDbl(price_2.Text)
        Dim current_culture As New CultureInfo("ar-SA")
        price_2.Text = dbl.ToString("C", current_culture)
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim current_culture As New CultureInfo("en-US")
        price_2.Text = dbl.ToString("C", current_culture)
End Sub
0 голосов
/ 05 мая 2018

Вы можете использовать перегрузку Decimal.TryParse(), которая позволяет указать NumberStyle и CultureInfo , из которого можно получить формат валюты.

Это позволяет методу синтаксического анализа понять, как интерпретировать предоставленный ввод.

Dim numberStyle As NumberStyles = NumberStyles.Currency Or
                                  NumberStyles.AllowCurrencySymbol Or
                                  NumberStyles.AllowDecimalPoint Or
                                  NumberStyles.AllowThousands

Dim CurrencyValue As Decimal
Dim arCInfo As New CultureInfo("ar-SA")
Dim usCInfo As New CultureInfo("en-US")

Dim InputType As String = If(price_2.Text.Contains("$"), "US", "AR")

Select Case InputType
    Case "US"
        If Decimal.TryParse(price_2.Text, numberStyle, usCInfo, CurrencyValue) Then
            price_2.Text = CurrencyValue.ToString("C", arCInfo)
        End If
    Case "AR"
        If Decimal.TryParse(price_2.Text, numberStyle, arCInfo, CurrencyValue) Then
            price_2.Text = CurrencyValue.ToString("C", usCInfo)
        End If
End Select
...