0

我有一个标签,我正在使用绑定和 FormatString,如下所示:

<Label Text="{Binding buying_price , StringFormat='{0} EUR'}">

标签的文本在我的 ViewModel 中绑定到双精度,我在标签上得到的内容是这样的:10000 EUR,我想要得到的是10 000 EUR12 501 005 EUR例如(没有尾随 .00)。我试过了,StringFormat='{0:C2} EUR'但没有一个给了我很好的结果。StringFormat='{0:N} EUR'StringFormat='{0:n} EUR'

4

2 回答 2

1

尝试StringFormat='{}{0:#,##,#}'根据您的文化使用,如果您得到结果10,000 EUR而不是 ,则可能需要在代码隐藏中更改它10 000 EUR,前者,是千位分隔符而不是逗号。

您可能想查看可用数字格式字符串的完整文档。

对文化有帮助的相关问题:如何在 C# 中用空格分隔数千

于 2020-10-05T20:47:08.097 回答
1

我没有让它在 xaml 中工作,而当我在后面的代码中使用转换和使用字符串格式时,它可以正常工作:

<ContentPage.Resources>
    <ResourceDictionary>
        <local:thousandsSeparatorConverter x:Key="thousandsSeparator"/>
    </ResourceDictionary>
</ContentPage.Resources>

<StackLayout>
    <!-- Place new controls here -->
    <Label Text="{Binding date, Converter={StaticResource thousandsSeparator}}"  HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand"/>
    
</StackLayout>

local:thousandsSeparatorConverter

public class thousandsSeparatorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string s = value as string;


        double number = double.Parse(s);

        // Gets a NumberFormatInfo associated with the en-US culture.
        NumberFormatInfo nfi = new CultureInfo("en-US", false).NumberFormat;

        // Displays the same value with a blank as the separator.
        nfi.NumberGroupSeparator = " ";
        Console.WriteLine(number.ToString("N0", nfi));

        string convertedNumber = number.ToString("N0", nfi);

        return convertedNumber;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }

}
于 2020-10-06T03:08:48.620 回答