字符串格式 Returns 意外结果
String Format Returns Unexpected Results
我有一个简单的 class,其中包含一个 属性 Format
,它被设置为任何给定的格式说明符。然后我使用此 class 的 属性 来格式化字符串,顾名思义。
举个例子:
public class FormatDefinition {
public string Format { get; set; }
}
class Program {
static void Main() {
var formatDefinition = new FormatDefinition {
Format = "N"
};
var number = 20.5;
var formatOne = string.Format("{0:" + formatDefinition.Format + "}", number);
var formatTwo = string.Format("{0:formatDefinition.Format}", number);
var formatThree = $"{number:formatDefinition.Format}";
Console.WriteLine(formatOne); // 20.5
Console.WriteLine(formatTwo); // formatDefinition21Format
Console.WriteLine(formatThree); // formatDefinition21Format
Console.ReadLine();
}
}
谁能解释一下为什么 formatTwo
和 formatThree
的结果是 formatDefinition21Format
?句号 .
似乎被格式化的数字所取代。
根据自定义数字格式字符串的documentation:
For fixed-point format strings (that is, format strings that do not
contain scientific notation format characters), numbers are rounded to
as many decimal places as there are digit placeholders to the right of
the decimal point.
这是因为您的小数点右边没有数字占位符。你告诉它把数字四舍五入到小数点后零位——换句话说,四舍五入到最接近的整数。
这些在功能上都是相同的 - 都是 return a22b
。
string.Format("{0:a.b}", 21.5);
string.Format("{0:a0b}", 21.5);
string.Format("{0:a0.b}", 21.5);
这里是 DotNetFiddle。
您指定的 custom numeric format string 由字符串 "formatDefinition.Format"
.
组成
这意味着 常量字符串 "formatDefinition" 后跟小数点(因此整个数字放在此处)后跟 常量字符串"Format"。
该数字四舍五入到小数点后零位,因为小数点后没有指定数字。
字符串 formatDefinition.Format
未被解释为 C# 代码。
我有一个简单的 class,其中包含一个 属性 Format
,它被设置为任何给定的格式说明符。然后我使用此 class 的 属性 来格式化字符串,顾名思义。
举个例子:
public class FormatDefinition {
public string Format { get; set; }
}
class Program {
static void Main() {
var formatDefinition = new FormatDefinition {
Format = "N"
};
var number = 20.5;
var formatOne = string.Format("{0:" + formatDefinition.Format + "}", number);
var formatTwo = string.Format("{0:formatDefinition.Format}", number);
var formatThree = $"{number:formatDefinition.Format}";
Console.WriteLine(formatOne); // 20.5
Console.WriteLine(formatTwo); // formatDefinition21Format
Console.WriteLine(formatThree); // formatDefinition21Format
Console.ReadLine();
}
}
谁能解释一下为什么 formatTwo
和 formatThree
的结果是 formatDefinition21Format
?句号 .
似乎被格式化的数字所取代。
根据自定义数字格式字符串的documentation:
For fixed-point format strings (that is, format strings that do not contain scientific notation format characters), numbers are rounded to as many decimal places as there are digit placeholders to the right of the decimal point.
这是因为您的小数点右边没有数字占位符。你告诉它把数字四舍五入到小数点后零位——换句话说,四舍五入到最接近的整数。
这些在功能上都是相同的 - 都是 return a22b
。
string.Format("{0:a.b}", 21.5);
string.Format("{0:a0b}", 21.5);
string.Format("{0:a0.b}", 21.5);
这里是 DotNetFiddle。
您指定的 custom numeric format string 由字符串 "formatDefinition.Format"
.
这意味着 常量字符串 "formatDefinition" 后跟小数点(因此整个数字放在此处)后跟 常量字符串"Format"。
该数字四舍五入到小数点后零位,因为小数点后没有指定数字。
字符串 formatDefinition.Format
未被解释为 C# 代码。