c# format 格式化如何理解?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# format 格式化如何理解?相关的知识,希望对你有一定的参考价值。

protected void Button1_Click(object sender, EventArgs e)

string str1 = String.Format("(C)Currency:0:C\n", -123.45678);
string str2 = String.Format("(D)Short date:0:d", DateTime.Now);
TextBox1.Text = str1;
TextBox2.Text = str2;


string str1 = String.Format("(C)Currency:0:C\n", -123.45678);这句如何理解???
String.Format("(C)Currency:0:C\n", -123.45678);它是如何格式化的,我试过将这句改为String.Format("货币格式:0:C", -123.45678);一样可以格式化,格式化后显示"货币格式:¥-123.46","\n"起到什么作用,怎么去掉可以,把它改成m就不行???
0:C:表示,后面的第一个变量或者表达式以货币形式输出.
这里除了C和d外还有什么参数,代表什么形式输出???

可以使用的格式化字符串:
"(d) Short date: . . . . . . . 0:d\n" +
"(D) Long date:. . . . . . . . 0:D\n" +
"(t) Short time: . . . . . . . 0:t\n" +
"(T) Long time:. . . . . . . . 0:T\n" +
"(f) Full date/short time: . . 0:f\n" +
"(F) Full date/long time:. . . 0:F\n" +
"(g) General date/short time:. 0:g\n" +
"(G) General date/long time: . 0:G\n" +
" (default):. . . . . . . . 0 (default = 'G')\n" +
"(M) Month:. . . . . . . . . . 0:M\n" +
"(R) RFC1123:. . . . . . . . . 0:R\n" +
"(s) Sortable: . . . . . . . . 0:s\n" +
"(u) Universal sortable: . . . 0:u (invariant)\n" +
"(U) Universal sortable: . . . 0:U\n" +
"(Y) Year: . . . . . . . . . . 0:Y\n",

以下为具体用法

String.Format 方法 (String, Object)
将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。

命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)

语法
Visual Basic(声明)
Public Shared Function Format ( _
format As String, _
arg0 As Object _
) As String
Visual Basic(用法)
Dim format As String
Dim arg0 As Object
Dim returnValue As String

returnValue = String.Format(format, arg0)
C#
public static string Format (
string format,
Object arg0
)
C++
public:
static String^ Format (
String^ format,
Object^ arg0
)
J#
public static String Format (
String format,
Object arg0
)
JScript
public static function Format (
format : String,
arg0 : Object
) : String
参数
format
String,包含零个或多个格式项。

arg0
要格式化的 Object。

返回值
format 的一个副本,其中的第一个格式项已替换为 arg0 的 String 等效项。
异常
异常类型 条件
ArgumentNullException
format 为 空引用(在 Visual Basic 中为 Nothing)。
FormatException
format 中的格式项无效。
- 或 -
用来表示要格式化的参数的数字小于零,或者大于或等于要格式化的指定对象的数目。
备注
此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式,并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持,下面的格式设置主题中对此有更详细的描述。

有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息,请参见 复合格式化。

有关数值格式说明符的更多信息,请参见 标准数字格式字符串 和 自定义数字格式字符串。

有关日期和时间格式说明符的更多信息,请参见 标准 DateTime 格式字符串 和 自定义 DateTime 格式字符串。

有关枚举格式说明符的更多信息,请参见 枚举格式字符串。

有关格式化的更多信息,请参见 格式化类型 和 格式化概述。

format 参数由零个或多个文本序列与零个或多个索引占位符混合组成,其中索引占位符称为格式项,它们与此方法的参数列表中的对象相对应。格式设置过程将每个格式项替换为对应对象的值的文本表示形式。

格式项的语法是 index[,alignment][:formatString],它指定了一个强制索引、格式化文本的可选长度和对齐方式,以及格式说明符字符的可选字符串,其中格式说明符字符用于控制如何设置相应对象的值的格式。格式项的组成部分包括:

index
从零开始的整数,指示对象列表中要格式化的元素。如果由 index 指定的对象是 空引用(在 Visual Basic 中为 Nothing),则格式项将被空字符串 ("") 替换。

alignment
可选整数,指示包含格式化值的区域的最小宽度。如果格式化值的长度小于 alignment,则用空格填充该区域。如果 alignment 为负,则格式化的值将在该区域中左对齐;如果 alignment 为正,则格式化的值将右对齐。如果没有指定 alignment,则该区域的长度为格式化值的长度。如果指定 alignment,则需使用逗号。

formatString
可选的格式说明符字符串。如果没有指定 formatString,并且对应的参数实现了 IFormattable 接口,则将 空引用(在 Visual Basic 中为 Nothing) 用作 IFormattable.ToString 格式字符串。因此,IFormattable.ToString 的所有实现都必须允许 空引用(在 Visual Basic 中为 Nothing) 作为格式字符串,并以 String 对象的形式返回对象表示形式的默认格式设置。如果指定 formatString,则必须使用冒号。

必须使用前导大括号字符和后缀大括号字符,即“”和“”。若要在 format 中指定单个大括号字符,请指定两个前导大括号字符或后缀大括号字符(即“”或“”)。

如果 format 的值为“Thank you for your purchase of 0:#### copies of Microsoft®.NET (Core Reference).”,并且 arg0 是值为 123 的 Int16,则返回值为:

“Thank you for your purchase of 123 copies of Microsoft®.NET (Core Reference).”

如果 format 的值为“Brad's dog has 0,-8:G fleas.”,arg0 是值为 42 的 Int16(在此示例中,下划线表示填充空格),则返回值将为:

“Brad's dog has 42______ fleas.”

示例
下面的代码示例演示数字、日期和枚举的标准格式设置说明符。

Visual Basic
' This code example demonstrates the String.Format() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
Public Enum Color
Yellow = 1
Blue = 2
Green = 3
End Enum 'Color

Private Shared thisDate As DateTime = DateTime.Now

Public Shared Sub Main()

' Store the output of the String.Format method in a string.
Dim s As String = ""

Console.Clear()

' Format a negative integer or floating-point number in various ways.
Console.WriteLine("Standard Numeric Format Specifiers")
s = String.Format("(C) Currency: . . . . . . . . 0:C" & vbCrLf & _
"(D) Decimal:. . . . . . . . . 0:D" & vbCrLf & _
"(E) Scientific: . . . . . . . 1:E" & vbCrLf & _
"(F) Fixed point:. . . . . . . 1:F" & vbCrLf & _
"(G) General:. . . . . . . . . 0:G" & vbCrLf & _
" (default):. . . . . . . . 0 (default = 'G')" & vbCrLf & _
"(N) Number: . . . . . . . . . 0:N" & vbCrLf & _
"(P) Percent:. . . . . . . . . 1:P" & vbCrLf & _
"(R) Round-trip: . . . . . . . 1:R" & vbCrLf & _
"(X) Hexadecimal:. . . . . . . 0:X" & vbCrLf, _
- 123, - 123.45F)
Console.WriteLine(s)

' Format the current date in various ways.
Console.WriteLine("Standard DateTime Format Specifiers")
s = String.Format("(d) Short date: . . . . . . . 0:d" & vbCrLf & _
"(D) Long date:. . . . . . . . 0:D" & vbCrLf & _
"(t) Short time: . . . . . . . 0:t" & vbCrLf & _
"(T) Long time:. . . . . . . . 0:T" & vbCrLf & _
"(f) Full date/short time: . . 0:f" & vbCrLf & _
"(F) Full date/long time:. . . 0:F" & vbCrLf & _
"(g) General date/short time:. 0:g" & vbCrLf & _
"(G) General date/long time: . 0:G" & vbCrLf & _
" (default):. . . . . . . . 0 (default = 'G')" & vbCrLf & _
"(M) Month:. . . . . . . . . . 0:M" & vbCrLf & _
"(R) RFC1123:. . . . . . . . . 0:R" & vbCrLf & _
"(s) Sortable: . . . . . . . . 0:s" & vbCrLf & _
"(u) Universal sortable: . . . 0:u (invariant)" & vbCrLf & _
"(U) Universal sortable: . . . 0:U" & vbCrLf & _
"(Y) Year: . . . . . . . . . . 0:Y" & vbCrLf, _
thisDate)
Console.WriteLine(s)

' Format a Color enumeration value in various ways.
Console.WriteLine("Standard Enumeration Format Specifiers")
s = String.Format("(G) General:. . . . . . . . . 0:G" & vbCrLf & _
" (default):. . . . . . . . 0 (default = 'G')" & vbCrLf & _
"(F) Flags:. . . . . . . . . . 0:F (flags or integer)" & vbCrLf & _
"(D) Decimal number: . . . . . 0:D" & vbCrLf & _
"(X) Hexadecimal:. . . . . . . 0:X" & vbCrLf, _
Color.Green)
Console.WriteLine(s)
End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
' (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
' (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
' (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'
C#
// This code example demonstrates the String.Format() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample

enum Color Yellow = 1, Blue, Green;
static DateTime thisDate = DateTime.Now;

public static void Main()

// Store the output of the String.Format method in a string.
string s = "";

Console.Clear();

// Format a negative integer or floating-point number in various ways.
Console.WriteLine("Standard Numeric Format Specifiers");
s = String.Format(
"(C) Currency: . . . . . . . . 0:C\n" +
"(D) Decimal:. . . . . . . . . 0:D\n" +
"(E) Scientific: . . . . . . . 1:E\n" +
"(F) Fixed point:. . . . . . . 1:F\n" +
"(G) General:. . . . . . . . . 0:G\n" +
" (default):. . . . . . . . 0 (default = 'G')\n" +
"(N) Number: . . . . . . . . . 0:N\n" +
"(P) Percent:. . . . . . . . . 1:P\n" +
"(R) Round-trip: . . . . . . . 1:R\n" +
"(X) Hexadecimal:. . . . . . . 0:X\n",
-123, -123.45f);
Console.WriteLine(s);

// Format the current date in various ways.
Console.WriteLine("Standard DateTime Format Specifiers");
s = String.Format(
"(d) Short date: . . . . . . . 0:d\n" +
"(D) Long date:. . . . . . . . 0:D\n" +
"(t) Short time: . . . . . . . 0:t\n" +
"(T) Long time:. . . . . . . . 0:T\n" +
"(f) Full date/short time: . . 0:f\n" +
"(F) Full date/long time:. . . 0:F\n" +
"(g) General date/short time:. 0:g\n" +
"(G) General date/long time: . 0:G\n" +
" (default):. . . . . . . . 0 (default = 'G')\n" +
"(M) Month:. . . . . . . . . . 0:M\n" +
"(R) RFC1123:. . . . . . . . . 0:R\n" +
"(s) Sortable: . . . . . . . . 0:s\n" +
"(u) Universal sortable: . . . 0:u (invariant)\n" +
"(U) Universal sortable: . . . 0:U\n" +
"(Y) Year: . . . . . . . . . . 0:Y\n",
thisDate);
Console.WriteLine(s);

// Format a Color enumeration value in various ways.
Console.WriteLine("Standard Enumeration Format Specifiers");
s = String.Format(
"(G) General:. . . . . . . . . 0:G\n" +
" (default):. . . . . . . . 0 (default = 'G')\n" +
"(F) Flags:. . . . . . . . . . 0:F (flags or integer)\n" +
"(D) Decimal number: . . . . . 0:D\n" +
"(X) Hexadecimal:. . . . . . . 0:X\n",
Color.Green);
Console.WriteLine(s);


/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/
C++
// This code example demonstrates the String.Format() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;
using namespace System::Globalization;

enum class Color Yellow = 1, Blue, Green;

int main(void)

DateTime^ thisDate = DateTime::Now;
// Store the output of the String::Format method in a string.
String^ resultString = "";

Console::Clear();

// Format a negative integer or floating-point number in
// various ways.
Console::WriteLine("Standard Numeric Format Specifiers");
resultString = String::Format(CultureInfo::CurrentCulture,
"(C) Currency: . . . . . . . . 0:C\n" +
"(D) Decimal:. . . . . . . . . 0:D\n" +
"(E) Scientific: . . . . . . . 1:E\n" +
"(F) Fixed point:. . . . . . . 1:F\n" +
"(G) General:. . . . . . . . . 0:G\n" +
" (default):. . . . . . . . 0 (default = 'G')\n" +
"(N) Number: . . . . . . . . . 0:N\n" +
"(P) Percent:. . . . . . . . . 1:P\n" +
"(R) Round-trip: . . . . . . . 1:R\n" +
"(X) Hexadecimal:. . . . . . . 0:X\n",
-123, -123.45f);
Console::WriteLine(resultString);

// Format the current date in various ways.
Console::WriteLine("Standard DateTime Format Specifiers");
resultString = String::Format(CultureInfo::CurrentCulture,
"(d) Short date: . . . . . . . 0:d\n" +
"(D) Long date:. . . . . . . . 0:D\n" +
"(t) Short time: . . . . . . . 0:t\n" +
"(T) Long time:. . . . . . . . 0:T\n" +
"(f) Full date/short time: . . 0:f\n" +
"(F) Full date/long time:. . . 0:F\n" +
"(g) General date/short time:. 0:g\n" +
"(G) General date/long time: . 0:G\n" +
" (default):. . . . . . . . 0 (default = 'G')\n" +
"(M) Month:. . . . . . . . . . 0:M\n" +
"(R) RFC1123:. . . . . . . . . 0:R\n" +
"(s) Sortable: . . . . . . . . 0:s\n" +
"(u) Universal sortable: . . . 0:u (invariant)\n" +
"(U) Universal sortable: . . . 0:U\n" +
"(Y) Year: . . . . . . . . . . 0:Y\n",
thisDate);
Console::WriteLine(resultString);

// Format a Color enumeration value in various ways.
Console::WriteLine("Standard Enumeration Format Specifiers");
resultString = String::Format(CultureInfo::CurrentCulture,
"(G) General:. . . . . . . . . 0:G\n" +
" (default):. . . . . . . . 0 (default = 'G')\n" +
"(F) Flags:. . . . . . . . . . 0:F (flags or integer)\n" +
"(D) Decimal number: . . . . . 0:D\n" +
"(X) Hexadecimal:. . . . . . . 0:X\n",
Color::Green);
Console::WriteLine(resultString);
;
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/
参考技术A 1 、在C#中有一部分指定的转意标识符:如\n 换行
\t 一个制表位标识。
2、Format是一String的一个静态方法,可以使字符串按照规定的格式显示出来,0表示后面参数列表中的第一个变量或者表达式。0:C:表示,后面的第一个变量或者表达式以货币形式输出.
3、至于\m 在C#中没有这个转意标识。
C# 需要较好的基础,然后才能更好的操控。本回答被提问者和网友采纳
参考技术B format 格式化
String.Format("(C)Currency:0:C\n", -123.45678);就是把-123.45678转变成指定的string的格式
\n 是换行的意思,\m 好像没有特殊意义
\是转义符
参考技术C 0:X2后面这个X2表示格式化这个参数的显示,不能的数据类型有不同的格式内容,如格式化一个 DOUBLE 类型:
string str = string.Format("0:F2",12.12236);
这里的 F2 表只保存两位小数,所以 str 的值等于 12.12
您这里的-20
指的是.去除掉文字后补充的空格数.
引号内17个空格!

C# String.Format 等价于带有自定义格式化程序的 JS

【中文标题】C# String.Format 等价于带有自定义格式化程序的 JS【英文标题】:C# String.Format equivalent is JS with customize formatter 【发布时间】:2021-12-04 17:12:49 【问题描述】:

关于这个问题有不同的问题,但它们都涵盖了 C# 原生 String.Format 方法,该方法涵盖了这样的情况,仅替换索引:

"0, 1!', 'Hello', 'world"

在 .Net 中,我可以实现 IFormatProvider, ICustomFormatter 并将其提供给

String Format(IFormatProvider provider, String format, params object[] args);

然后格式化字符串,如:

"0:u 0:l" 

在格式化程序实现中,我可以访问格式(在示例中为“u”或“l”)并通过切换格式来相应地格式化字符串。如何用 JS 实现这一点

C# 示例:

public class CustomFormatter : IFormatProvider, ICustomFormatter

    public string Format(string format, object arg, IFormatProvider formatProvider)
    
        switch (format)
        
            case "u":
                return (arg).ToUpperCase();
            case "l":
                return (arg).ToLowerCase();
        
    
 

string.Format(new CustomFormatter(),"0:u 1:l","hello","WORLD")
//OUTPUT: "HELLO world"

【问题讨论】:

这能回答你的问题吗? JavaScript equivalent to printf/String.Format 不,它涵盖了“0,1!','Hello','world”这样的例子 【参考方案1】:

Javascript 中不存在这样的东西,但是您可以使用外部库来实现类似的结果。例如使用包string-format 你可以这样做:

const fmt = format.create (
   lower: s => s.toLowerCase(),
   upper: s => s.toUpperCase(),
)

fmt ('!upper !lower!', "hello","WORLD")
// 'HELLO world'

【讨论】:

以上是关于c# format 格式化如何理解?的主要内容,如果未能解决你的问题,请参考以下文章

C#详解format函数,各种格式化

C# String.Format格式说明

C#中string.Format格式化日期

C# String.Format 等价于带有自定义格式化程序的 JS

C#字符串格式[重复]

通过Oracle函数SQL实现C# String.Format字符串格式化功能