[英]Format a Decimal to 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
将它们保留为小数点放在要排序的列表或容器中,并在显示时简单地使用字符串格式。 我不明白当您希望以任何方式显示时,需要同时将它们同时作为字符串和十进制。
在这里,我为您提供了两个主要选择。 第一种是将您的数字零填充( $001,234.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
。 这将按预期显示排序(控制属性允许),但也将按预期显示。 当然,您可能也想将类设为不可变的struct
。 但这只是为了显示要点。
这样的类也将提供很好的LINQ支持,因为您可以拥有IEnumerable<T>
并只需调用OrderBy(c => c)
。 您甚至可以通过调用string.Join(Environment.NewLine, coll.OrderBy(c => c))
来打印string.Join(Environment.NewLine, coll.OrderBy(c => c))
的值,这非常干净。
当然,这样的类只能用于UI代码。 您不需要处理序列化之类的东西,因为它会提供不必要的开销。
创建一个包含小数及其适当格式的字符串的类。 使用Linq按十进制对类对象进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.