Я использую Xamarin Forms, и я попытался отформатировать строку (в представлении XAML) для валюты в форме: 1.235.436,00, где запятая , является десятичным разделителем. Сначала я использовал StringFormat{0:C2}, и результат был: $1,235,436.00, который предназначен для США. После я попробовал StringFormat{0:#,0.#0}, результат: 1,235,436.00.
Наконец, я попытался использовать ту же логику, поменяв местами точку и запятую {0:#.0,#0}, и в результате получил: 1235436.000.
Итак, как я могу отформатировать валюту для Франции, Испании, Швеции и т. д.
что такое 0.000.000,00 €/kr?
Код XAML:
Label Text = "{Binding value, StringFormat='{0:C2}.'}"
Что в моем случае неверно.





Вы не можете сделать это непосредственно в привязке с помощью StringFormat. Вы можете реализовать собственный IValueConverter или создать свойство string, а затем реализовать форматирование в коде:
1235436.ToString("C2", CultureInfo.CreateSpecificCulture("es-ES"));
Это отформатирует число как валюту с определенной настройкой отображения испанской культуры.
Вы также можете изменить формат культуры по умолчанию для принудительного форматирования:
var culture = CultureInfo.CreateSpecificCulture("en-US");
culture.NumberFormat.CurrencyDecimalSeparator = ",";
culture.NumberFormat.CurrencyGroupSeparator = ".";
Но в этом нет необходимости. По умолчанию параметры языка и региональных параметров задаются таким образом, чтобы пользователи ожидали отображения содержимого. Изменения в форматах по умолчанию могут вызвать недопонимание.
Вы использовали правильный формат {0:C2}. Чтобы изменить формат в зависимости от региона, вам необходимо изменить культуру в потоке. Похоже, у вас установлен en-US по умолчанию, как вы и сказали. Проверить это можно так:
CultureInfo current = CultureInfo.CurrentCulture;
Console.WriteLine("The current culture is {0}", current.Name);
Чтобы изменить его на Францию:
CultureInfo.CurrentCulture = new CultureInfo("fr-FR");
И теперь ваше значение будет автоматически отформатировано как 1.235.436,00.
Спасибо за совет, но в Xamarin Forms я не могу использовать выражение: CultureInfo.CurrentCulture = new CultureInfo("fr-FR");
Это не выражение, вам нужно добавить его в свой код C#. Когда вы запускаете приложение, вам необходимо определить язык и регион телефона пользователя, а затем использовать строку из моего ответа, чтобы соответствующим образом установить культуру потока.
Спасибо Расил Хилан и Мартин Зикмунд за предложения :) Вот ответ в Xamarin Forms: CultureInfo myCurrency = new CultureInfo("fr-FR"); CultureInfo.DefaultThreadCurrentCulture = myCurrency;
Да, это похоже на мое предложение, только использует DefaultThreadCurrentCulture вместо CurrentCulture. После того, как вы запустите эту строку кода, все форматы (например, валюта, даты и т. д.) Будут выполнены с использованием указанной культуры.
вы пытаетесь пройти:
// Get Present Culture in app.
var ci = new CultureInfo(App.DeviceCulture);
// Преобразовать в формат String.
stringValue = ConvertCultureCurrencyToString(stringValue, ci);
// Создаем метод преобразования в формат
public static string ConvertCultureCurrencyToString(string stringValue, CultureInfo ci)
{
try
{
if (string.IsNullOrEmpty(stringValue))
return "0";
stringValue = System.Convert.ToString(stringValue, ci);
// currency -> double (format to double)
var currency = decimal.Parse(stringValue, NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, ci);
stringValue = currency.ToString("#,###.###", ci);
if (stringValue.FirstOrDefault() == '.' || stringValue.FirstOrDefault() == ',')
stringValue = $"0{stringValue}";
return stringValue;
}
catch
{
return "0";
}
}
Добавьте строку кода в xaml.cs Это преобразует культуру
CultureInfo myCurrency = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = myCurrency;
В xaml
<Label Text = "{Binding value, StringFormat='{0:#,0.#0}'}"
Результат: 5,245.00
Я получаю эту информацию через список
Добавление настраиваемого свойства не работает при генерации apk с привязкой. Я озадачен