C#中将Decimal转换为货币字符串

24
为了显示货币,我们要做的是:

ToString("0.##")

当值为 5.00 时,输出结果为:

5

对于值5.98,输出结果为:

5.98

当值为5.90时,输出为:

5.9

我需要第三种情况输出为带有两位小数的数字,例如:

5.90

如何在不影响其他结果的情况下完成这个操作?


你为什么不能使用货币格式字符串呢?value.ToString("c") - Steve Danner
4
为什么不直接使用 someDecimal.ToString("c", new CultureInfo("en-US"))?这样也会应用货币符号。 - Tejs
@Tejs,我们正在编写自己的商店,并且支持多种货币,但很遗憾,在目前阶段,这不太符合设计要求! - Tom Gullen
2
我认为你不能使用任何内置或自定义格式字符串来实现这一点(有选择地不带小数点或带两个小数点)。你可能需要添加逻辑来选择其中一个或实现自己的IFormatProvider - Jacob
@Jacob 我也是这么想的,但在这个阶段做起来会很麻烦! - Tom Gullen
@TomGullen - 支持多种货币并不是问题,这就是new CultureInfo("en-US")的作用。试试使用new CultureInfo("en-GB")或者new CultureInfo("fr-FR") - Justin Morgan
6个回答

26

请尝试:

value.ToString("#,##0.00")

或者只需:

value.ToString("C")

我不知道有没有内置的方法可以仅在两个小数位都不为零时才展开。可能只需要使用一个if语句。

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

1
OP说,如果小数部分是整数值,他希望将其省略。 - Jacob

18

我知道这并没有给你一个可以解决问题的格式,但这是一个简单的解决方法。

(5.00).ToString("0.00").Replace(".00","");  // returns 5
(5.90).ToString("0.00").Replace(".00", ""); // returns 5.90
(5.99).ToString("0.00").Replace(".00", ""); // returns 5.99

你应该使用 5.00m 这样的格式吗? - Sebastian
10
(5.00).ToString("C"); - Prince Chopra
当正确答案早在11分钟前给出时,这怎么成为采纳的答案了? - Mike Devenney
1
@MikeDevenney 因为你所提到的答案直到2018年8月才真正回答了这个问题。 - Travis
@TravisSunderland 不错的决定,我没有注意到最后一部分是在八月编辑期间添加的。 - Mike Devenney

11
您可以使用扩展方法,类似于以下内容:
```csharp public static class StringExtensions { public static string RemoveHtmlTags(this string input) { return Regex.Replace(input, "<.*?>", string.Empty); } } ```
该方法可以帮助您移除HTML标签。
public static string ToCurrencyString(this decimal d)
{
    decimal t = Decimal.Truncate(d);
    return d.Equals(t) ? d.ToString("0.##") : d.ToString("#, ##0.00")
}

10

# 表示如果没有数字则不显示,而 0 则表示如果没有数字就填上 0。

ToString("0.00")

将数字转换为字符串,并且保留两位小数。如果小数点后面不足两位,用 0 来填充。


谢谢你的解释,我不知道那个。 - VictorySaber

1

我不确定是否有遗漏,但是你不能只是这样做吗:

decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接