提问者:小点点

C#三部分格式输出问题


最近,我在这篇文章中读到了关于C#三部分显示格式的内容:https://diptimayapatra.wordpress.com/2014/01/13/3-part-format-of-numbers-in-c/

3部分格式用于显示正、负和零值数字。字符串格式有三个部分。第一部分对应于阳性试验,第二部分对应于阴性试验。最后一部分用于值为零时。

其结果将为“(+)29.12”

  double value1 = 29.12;
  string formattingString = $"(+) #.##; (-) #.##; No value provided";
  Console.WriteLine(value1.ToString(formattingString));

这样做的结果将是“积极的”

  double value1 = 29.12;
  string formattingString = $"positve; negative; No value provided";
  Console.WriteLine(value1.ToString(formattingString));

但这样做的结果是“2929.12”。为什么会这样呢?

基于以上逻辑,我希望结果应该是29.12,但最终变成了2929.12。为什么内部使用.会变成这种不可预测的输出?

  double value1 = 29.12;
  string formattingString = $"29.12; Negative; No value provided";
 Console.WriteLine(value1.ToString(formattingString));

共2个答案

匿名用户

如果希望它们是文字字符串,请将它们括在单引号中。

double value1 = 29.12;
string formattingString = $"'positve'; 'negative'; 'No value provided'";
Console.WriteLine(value1.ToString(formattingString));

https://dotnetfiddle.net/kevh8b

double value1 = 29.12;
string formattingString = $"'29.12'; 'negative'; 'No value provided'";
Console.WriteLine(value1.ToString(formattingString));

https://dotnetfiddle.net/jurvtm

匿名用户

double value1 = 29.12;
string formattingString = $"29.12; Negative; No value provided";
Console.WriteLine(value1.ToString(formattingString));

您提供了一个正数,因此只有格式字符串的第一部分是相关的。这种情况下的输出是相同的:

formattingString = $"29.12";

文件中说:

所有其他字符:字符不变地复制到结果字符串。

这意味着,29输出不变,12输出不变。显然,.负责附加的29,它是:

double value1 = 29.12;
string formattingString = $"29.12; Negative; No value provided";
Console.WriteLine(value1.ToString(formattingString));
formattingString = $"29.12";
Console.WriteLine(value1.ToString(formattingString));
formattingString = $".";
Console.WriteLine(value1.ToString(formattingString));