在C#中用逗号和小数格式化数字(asp.net MVC3)

Kri*_*han 39 c# formatting number-formatting asp.net-mvc-3

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

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

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

我试过了 ToString("#,##0.##").但它不是格式化它

Roy*_*oys 75

int number = 1234567890;
Convert.ToDecimal(number).ToString("#,##0.00");
Run Code Online (Sandbox Code Playgroud)

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

  • @Toolkit 线程的当前区域性决定使用什么分隔符。你的文化使用空间。您可能想要使用带有附加参数(即格式提供程序)的“.ToString”重载。对于格式提供程序,您可以传递文化,例如“CultureInfo.InvariantCulture”或“CultureInfo.GetCultureInfo("en-US")”。或者您可以传递“NumberFormatInfo”的实例。 (2认同)

Jep*_*sen 28

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

number.ToString("N")
Run Code Online (Sandbox Code Playgroud)

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

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

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

CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes
Run Code Online (Sandbox Code Playgroud)

数组,因为您没有指定特殊格式提供程序.


Pat*_*uza 9

试试吧

ToString("#,##0.00")
Run Code Online (Sandbox Code Playgroud)

来自MSDN

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

"00"说明符使该值四舍五入到小数点前面的最近数字,其中始终使用从零开始的舍入.例如,使用"00"格式化34.5将导致值35.*


Wad*_*ler 9

我有同样的问题.我想格式化电子表格中的"常规"格式的数字,这意味着如果它们很重要则显示小数,但如果没有,则将其删除.换一种说法:

1234.56 => 1,234.56

1234 => 1,234

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

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));
}
Run Code Online (Sandbox Code Playgroud)

生产:

123 = 123
1234 = 1,234
1234.56 = 1,234.56
123456.789 = 123,456.789
1234.56789123 = 1,234.5679
Run Code Online (Sandbox Code Playgroud)


Jos*_*980 9

对于Razor View:

$@string.Format("{0:#,0.00}",item.TotalAmount)
Run Code Online (Sandbox Code Playgroud)


小智 8

试试

ToString("#,##0.###")
Run Code Online (Sandbox Code Playgroud)

产生:

1234.55678 => 1,234.556

1234 => 1,234


Dar*_*koM 6

CultureInfo us = new CultureInfo("en-US");
TotalAmount.ToString("N", us)
Run Code Online (Sandbox Code Playgroud)


Mat*_*son 5

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

Num.ToString("#,0.00"")

  • “#,0”格式化千位分隔符
  • “0.00”强制保留两位小数