簡體   English   中英

將小數格式化為貨幣

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

您當然想覆蓋EqualsGetHashCode 這將按預期顯示排序(控制屬性允許),但也將按預期顯示。 當然,您可能也想將類設為不可變的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM