我正在尝试将我的格式double
设置为美元货币格式,但00
如果值是一个整数,我不希望尾随 's。
我试过了
String.Format("{0:#,0.#0}", cost);
和
String.Format("{0:#,0.##}", cost);
前者让我落后00
于整数,后者会给我55.6
我想要的地方55.60
。如何格式化我的值以满足这两个需求?
我正在尝试将我的格式double
设置为美元货币格式,但00
如果值是一个整数,我不希望尾随 's。
我试过了
String.Format("{0:#,0.#0}", cost);
和
String.Format("{0:#,0.##}", cost);
前者让我落后00
于整数,后者会给我55.6
我想要的地方55.60
。如何格式化我的值以满足这两个需求?
尝试这样的事情:
var output = string.Format(((Math.Round(num) == num) ? "{0:0}" : "{0:0.00}"), num);
我认为使用标准格式字符串是不可能的,但一个技巧是:
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);
我知道,这很丑...
尝试
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"
您可以通过调用来使用货币(“C”)格式说明符ToString
。无需实际工作。
例子
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
与其他方式相比,这样做的优势在于它可以为您处理文化信息,并且是一种更优雅的解决方案。