将十进制格式化为货币

本文关键字:货币 格式化 十进制 | 更新日期: 2023-09-27 18:18:47

我有一个小数列表,我希望能够将其格式化为美元货币。我知道我可以用字符串来做这个。但是如果我把小数转换成字符串它们就不能正确排序了

1234.98
91234.12
541234.12

当使用string转换为货币时。格式,它们将按以下顺序排序

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

我希望它们保持为小数,这样它们就可以正确排序为

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

将十进制格式化为货币

在要排序的列表或容器中保持它们为小数,并在显示时简单地使用字符串格式。

我不明白为什么要把它们同时作为字符串和小数,因为你可以随心所欲地显示它。

这里有两个主要选项。第一个是零填空你的数字($001,234.98),这似乎会直接反对大多数用户的首选体验。

另一个选项是为currency创建一个类型:

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");
    }
}

当然,您想要覆盖EqualsGetHashCode。这将按预期显示排序(控件属性允许),但它也将按预期显示。当然,您也可能希望将类设置为不可变的struct。但这只是为了展示要点。

这样的类也会提供非常好的LINQ支持,因为你可以有一个IEnumerable<T>并简单地调用OrderBy(c => c)。您甚至可以通过调用string.Join(Environment.NewLine, coll.OrderBy(c => c))来打印出每行的值,这非常简洁。

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

创建一个类来保存小数和相应的格式化字符串。使用Linq按小数对类对象进行排序。