格式化字符串 - 货币价值

时间:2012-05-10 19:25:42

标签: c# string-formatting

我正在尝试将double格式化为美元货币格式,但如果值为整数,我不希望尾随00

我试过了

String.Format("{0:#,0.#0}", cost);

String.Format("{0:#,0.##}", cost);

前者让我跟踪00整数,后者会给我55.6我想要的55.60。如何格式化我的价值以满足这两种需求?

4 个答案:

答案 0 :(得分:4)

尝试这样的事情:

var output = string.Format(((Math.Round(num) == num) ? "{0:0}" : "{0:0.00}"), num);

答案 1 :(得分:2)

我不认为使用标准格式字符串是可能的,但诀窍是:

Regex.Replace(String.Format("{0:#,##0.00}", cost),"\\.00$","");

或:

string s = String.Format("{0:#,##0.00}", cost);

if (s.EndsWith(".00"))
   s = s.Substring(0,s.Length-3);

我知道,这太丑了......

答案 2 :(得分:2)

尝试

string val = decimal.Parse("2.00").ToString("G29")


?decimal.Parse("2.00").ToString("G29")
"2"
?decimal.Parse("2.02").ToString("G29")
"2.02"
?decimal.Parse("12.0045").ToString("G29")
"12.0045"
?decimal.Parse("0.0045").ToString("G29")
"0.0045"
?decimal.Parse("0.00").ToString("G29")
"0"
?decimal.Parse("0.05").ToString("G29")
"0.05"

答案 3 :(得分:1)

您可以通过致电ToString来使用Currency ("C") Format Specifier。无需实际工作。

实施例

string s = cost.ToString("C0"); // Where 0 is the precision

你不能在一次调用中做任何有条件的事情,比如省略精确显示,但你可以通过一些扩展方法来做。

static class CurrencyExtensions
{
    public static String ToCurrency(this decimal d) { // Extend Decimal
        if (d % 1 != 0) return d.ToString("C2");
        return d.ToString("C0");
    }

    public static String ToCurrency(this double d) { // Extend Double
        if (d % 1 != 0) return d.ToString("C2");
        return d.ToString("C0");
    }
}

使用示例

decimal amount1 = 4m;
decimal amount2 = 4.25m;

string s1 = amount1.ToCurrency(); // $4
string s2 = amount2.ToCurrency(); // $4.25

这样做的好处在于它可以为您处理文化信息,是一种更优雅的解决方案。