将十进制格式化为货币
本文关键字:货币 格式化 十进制 | 更新日期: 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");
}
}
当然,您想要覆盖Equals
和GetHashCode
。这将按预期显示排序(控件属性允许),但它也将按预期显示。当然,您也可能希望将类设置为不可变的struct
。但这只是为了展示要点。
这样的类也会提供非常好的LINQ支持,因为你可以有一个IEnumerable<T>
并简单地调用OrderBy(c => c)
。您甚至可以通过调用string.Join(Environment.NewLine, coll.OrderBy(c => c))
来打印出每行的值,这非常简洁。
创建一个类来保存小数和相应的格式化字符串。使用Linq按小数对类对象进行排序。