[英]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.