54

我需要用逗号和小数点显示一个数字。

例如:案例 1:十进制数是 432324(这没有逗号或小数点)。
需要显示为:432,324.00
不是:432,324

案例 2:十进制数是 2222222.22(这没有逗号)。
需要显示为:2,222,222.22

我试过ToString("#,##0.##")了,但它的格式不正确。

4

12 回答 12

104
int number = 1234567890;
Convert.ToDecimal(number).ToString("#,##0.00");

你会得到结果1,234,567,890.00

于 2013-06-21T10:16:15.420 回答
38

也许您只是想要标准格式字符串"N",如

number.ToString("N")

它将使用千位分隔符和固定数量的小数。千位分隔符的符号和小数点的符号取决于CultureInfo您使用的格式提供程序(通常是 ),小数位数也是如此(通常为 2,根据您的需要)。

如果格式提供程序指定了不同的小数位数,并且您不想更改格式提供程序,则可以在 之后给出小数位数N,如.ToString("N2").

编辑:逗号之间的组的大小由

CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes

数组,假设您没有指定特殊的格式提供程序。

于 2013-04-16T11:48:39.097 回答
11

我有同样的问题。我想像电子表格中的“常规”格式那样格式化数字,这意味着如果它们很重要则显示小数,但如果不重要则将它们去掉。换句话说:

1234.56 => 1,234.56

1234 => 1,234

它需要支持小数点后的最大位数,但如果不需要,不要在尾随零或点,当然,它需要文化友好。我从来没有真正想出单独使用String.Format的干净方法,但是 String.Format 和Regex.Replace的组合以及NumberFormatInfo.CurrentInfo的一些文化帮助完成了这项工作(LinqPad C# 程序)。

string FormatNumber<T>(T number, int maxDecimals = 4) {
    return Regex.Replace(String.Format("{0:n" + maxDecimals + "}", number),
                         @"[" + System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + "]?0+$", "");
}   

void Main(){
    foreach (var test in new[] { 123, 1234, 1234.56, 123456.789, 1234.56789123 } )
        Console.WriteLine(test + " = " + FormatNumber(test));
}

产生:

123 = 123
1234 = 1,234
1234.56 = 1,234.56
123456.789 = 123,456.789
1234.56789123 = 1,234.5679
于 2014-12-21T16:40:16.680 回答
11

尝试

ToString("#,##0.###")

产生:

1234.55678 => 1,234.556

1234 => 1,234

于 2018-02-14T13:42:28.997 回答
10

尝试

ToString("#,##0.00")

来自 MSDN

*“0”自定义格式说明符用作零占位符符号。如果正在格式化的值在格式字符串中出现零的位置有一个数字,则该数字将复制到结果字符串中;否则,结果字符串中将出现零。小数点前最左边的零和小数点后最右边的零的位置决定了结果字符串中始终存在的数字范围。

“00”说明符使值四舍五入到小数点前最接近的数字,其中始终使用从零开始的四舍五入。例如,使用“00”格式化 34.5 将产生值 35。*

于 2013-04-16T11:21:12.590 回答
10

对于剃刀视图:

$@string.Format("{0:#,0.00}",item.TotalAmount)
于 2015-07-22T17:14:45.933 回答
7
CultureInfo us = new CultureInfo("en-US");
TotalAmount.ToString("N", us)
于 2013-05-10T14:09:04.730 回答
3

您的问题不是很清楚,但这应该可以实现您想要做的事情:

decimal numericValue = 3494309432324.00m;
string formatted = numericValue.ToString("#,##0.00");

然后formatted将包含:3,494,309,432,324.00

于 2013-04-16T11:20:31.313 回答
3

所需要的只是“#,0.00”,其余的由 c# 完成。

Num.ToString("#,0.00"")

  • "#,0" 格式化千位分隔符
  • “0.00”强制两位小数
于 2014-01-20T23:31:16.547 回答
1

如果您使用字符串变量,您可以直接使用:然后指定格式(例如 N0、P2 等)来格式化字符串。

decimal Number = 2000.55512016465m;
$"{Number:N}" #Outputs 2,000.55512016465

您还可以通过在末尾添加一个数字来指定要显示的小数位数,例如

$"{Number:N1}" #Outputs 2,000.5
$"{Number:N2}" #Outputs 2,000.55
$"{Number:N3}" #Outputs 2,000.555
$"{Number:N4}" #Outputs 2,000.5551
于 2019-03-14T01:17:32.517 回答
0
string Mynewcurrency = DisplayIndianCurrency("7743450.00");
        private string DisplayIndianCurrency(string EXruppesformate) 
        { 
        string fare = EXruppesformate;
        decimal parsed = decimal.Parse(fare, CultureInfo.InvariantCulture);
        CultureInfo hindi = new CultureInfo("en-IN");
     // string text = string.Format(hindi, "{0:c}", parsed);if you want <b>Rs 77,43,450.00</b>
    string text = string.Format(hindi, "{0:N}", parsed); //if you want <b>77,43,450.00</b>
      return ruppesformate = text;
    }
于 2017-05-23T11:42:52.657 回答
0

对于现在正在查看此内容并在使用时获得“方法 'ToString' 没有重载需要 1 个参数”的任何人:

TotalNumber.ToString("N")

我的解决方案是使用:

TotalNumber.Value.ToString("N")

当直接在 MVC 视图中工作时,我经常会遇到这个问题,以下方法不起作用:

@Model.Sum(x => x.Number).ToString("N")

而这有效:

@Model.Sum(x => x.Number).Value.ToString("N")
于 2021-12-06T12:45:05.547 回答