Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将十进制设置为货币格式_C#_Formatting_Currency - Fatal编程技术网

C# 将十进制设置为货币格式

C# 将十进制设置为货币格式,c#,formatting,currency,C#,Formatting,Currency,我有一个小数列表,我希望能够将其格式化为美国货币。我知道我可以用string.format实现这一点,但如果我将小数转换为字符串,它们将无法正确排序 1234.98 91234.12 541234.12 使用string.format转换为货币时,它们将按以下顺序排序 $91,234.12 $541,234.12 $1,234.98 我希望它们保持为小数,这样它们就可以像 $541,234.12 $91,234.12 $1,234.98 在用于排序的列表或容器中,将它们保留为小数,并在显示

我有一个小数列表,我希望能够将其格式化为美国货币。我知道我可以用string.format实现这一点,但如果我将小数转换为字符串,它们将无法正确排序

1234.98
91234.12
541234.12
使用string.format转换为货币时,它们将按以下顺序排序

$91,234.12
$541,234.12
$1,234.98
我希望它们保持为小数,这样它们就可以像

$541,234.12
$91,234.12
$1,234.98

在用于排序的列表或容器中,将它们保留为小数,并在显示时使用字符串格式。我不明白,当您可以按自己的意愿显示它们时,是否需要将它们同时作为字符串和小数。

将它们作为小数保存在用于排序的列表或容器中,并在显示时对其使用字符串格式。我不理解当您可以按自己的意愿显示它时,是否需要同时将它们作为字符串和小数点。

创建一个包含小数点及其相应格式字符串的类。
使用Linq按十进制对类对象进行排序。

创建一个包含十进制及其相应格式化字符串的类。
使用Linq按十进制对类对象进行排序。

我在这里看到两个主要选项。第一种方法是将数字归零(
$001234.98
),这似乎会直接影响大多数用户的首选体验

另一个选项是创建货币类型:

public class Currency : IComparable
{
    public decimal Value { get; set; }

    public int CompareTo(Currency b)
    {
        return Value.CompareTo(b.Value);
    }

    public override string ToString()
    {
        return Value.ToString("C");
    }
}
当然,您希望覆盖
Equals
GetHashCode
。这将按预期显示排序(控件属性允许),但也将按预期显示。当然,您可能也想将该类变成一个不可变的
结构。但这只是为了说明要点

这样的类还可以提供非常好的LINQ支持,因为您可以使用
IEnumerable
,只需调用
OrderBy(c=>c)
。您甚至可以通过调用
string.Join(Environment.NewLine,coll.OrderBy(c=>c))
来打印行上的值,这非常干净


当然,像这样的类应该只用于UI代码。您不想处理序列化或诸如此类的事情,因为它会提供不必要的开销。

我在这里看到两个主要选项供您选择。第一种方法是将数字归零(
$001234.98
),这似乎会直接影响大多数用户的首选体验

另一个选项是创建货币类型:

public class Currency : IComparable
{
    public decimal Value { get; set; }

    public int CompareTo(Currency b)
    {
        return Value.CompareTo(b.Value);
    }

    public override string ToString()
    {
        return Value.ToString("C");
    }
}
当然,您希望覆盖
Equals
GetHashCode
。这将按预期显示排序(控件属性允许),但也将按预期显示。当然,您可能也想将该类变成一个不可变的
结构。但这只是为了说明要点

这样的类还可以提供非常好的LINQ支持,因为您可以使用
IEnumerable
,只需调用
OrderBy(c=>c)
。您甚至可以通过调用
string.Join(Environment.NewLine,coll.OrderBy(c=>c))
来打印行上的值,这非常干净


当然,像这样的类应该只用于UI代码。你不想处理序列化之类的事情,因为它会提供不必要的开销。

您能将它们排序,然后转换为正确的字符串格式吗?那么您想按每个数字中最大数字的值排序吗?您能将它们排序,然后转换为正确的字符串格式吗?那么您想按每个数字中最大数字的值排序吗?我认为这是最佳解决方案。我错过什么了吗?(到目前为止我过得很糟糕!)字符串和格式化的数字不能保证正确排序。我尊重地不同意
货币
类。非OO-数字集合及其格式应封装到一个类中。正如您要求客户机实例化数字“列表”,实例化货币,声明格式,并发明代码以使其协同工作。@radarbob这一切都取决于您如何使用代码。我将其作为一个自包含的解决方案进行介绍,其中类将
ToString
按预期进行,并按预期进行排序,每个类都使用内置的.NET实用程序。有时LINQ解决方案会更理想,有时也会更理想。这真的取决于环境。恕我直言,我不是说这是“不是最好的”,等等。这是错误的。如果@Ironside24想了解细节,我们可以去论坛,但他已经决定了答案。我认为这是最好的解决方案。我错过什么了吗?(到目前为止我过得很糟糕!)字符串和格式化的数字不能保证正确排序。我尊重地不同意
货币
类。非OO-数字集合及其格式应封装到一个类中。正如您要求客户机实例化数字“列表”,实例化货币,声明格式,并发明代码以使其协同工作。@radarbob这一切都取决于您如何使用代码。我将其作为一个自包含的解决方案进行介绍,其中类将
ToString
按预期进行,并按预期进行排序,每个类都使用内置的.NET实用程序。有时LINQ解决方案会更理想,有时也会更理想。这真的取决于环境。恕我直言,我不是说这是“不是最好的”,等等。这是错误的。如果@Ironside24想了解细节,我们可以去论坛,但他已经决定了答案。