字符串格式返回意外结果
本文关键字:结果 意外 返回 格式 字符串 | 更新日期: 2023-09-27 17:52:47
我有一个简单的类,它包含一个属性Format
,它被设置为任何给定的格式说明符。然后,我使用这个类的属性,顾名思义,格式化字符串。
看下面的例子:
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
的结果?似乎句号.
被格式化的数字代替了。
指定由字符串"formatDefinition.Format"
组成的自定义数字格式字符串。
这被认为是指常量字符串"formatDefinition"后面跟着小数点(因此整个数字在这里),后面跟着常量字符串"Format"。
由于小数点后没有指定数字,因此该数字四舍五入到小数点后的零位。
字符串formatDefinition.Format
不被解释为c#代码
根据自定义数字格式字符串的文档:
用于定点格式字符串(即,格式化不包含包含科学符号格式字符),数字四舍五入到右边有多少位数字占位符,就有多少位小数小数点
这是因为你的小数点右边没有数字占位符。你告诉它将数字四舍五入到小数点后0位——换句话说,四舍五入到最接近的整数。
它们在功能上都是一样的——都返回a22b
。
string.Format("{0:a.b}", 21.5);
string.Format("{0:a0b}", 21.5);
string.Format("{0:a0.b}", 21.5);
这是一个DotNetFiddle