自定义数字格式负部分错误
Custom Numeric Format Negative section bug
不确定这是 100% 的错误,但行为确实很奇怪。我的任务是正确格式化分数。例如如果:
int numerator = -7;
int denominator = 100;
然后如果应用下一行代码:
string fraction = numerator.ToString("#/"+ denominator +";-#/" + denominator +";0");
根据微软的节分隔符逻辑:https://msdn.microsoft.com/en-us/library/0c899ak8%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396#The
如果分子为正 (7),则应生成“7/100”,如果分子为负 (-7),则应生成“-7/100”,如果分子为 0,则应生成“0”。因为格式字符串看起来像这样“#/100” ;-#/100;0"
但由于某些原因,它不能正常用于负面情况。如果分子为正,则所有行为均符合预期,但如果由于某种原因为负,它将替换生成的字符串中的最后一位。所以我最终得到这样的输出:“-/107”。有什么想法吗?
您的格式字符串是“#/100;-#/100;0”。这是一个非常奇怪的格式字符串。你是说:
- 如果数字是正数,则使用“#/100”的格式。
- 如果数字为负数,则使用“-#/100”的格式。
- 如果数字为零,则使用格式“0”。
对于前两种情况,您都有 3 个数字占位符,第一个是可选的(因此只有在有 3 个或更多数字要打印时才会出现),最后两个是必需的(所以他们会显示 0 否则)。 "/" 和 "1" 字符没有特殊含义,因此它们将按原样显示。
所以我们有:
1 => /101
12 => /112
123 => 1/123
-1 => -/101
-12 => -/112
-123 => -1/123
所有这些都按照记录工作 - 只是不是您希望它如何工作。听起来您可能想要 quote 100,这样 0 就不会成为占位符。格式字符串“#/'100';-#/'100';0”产生的输出为:
1 => 1/100
12 => 12/100
123 => 123/100
-1 => -1/100
-12 => -12/100
-123 => -123/100
...但我建议在生成时完全不使用格式字符串:
string text = numerator == 0 ? "0" : numerator + "/" + denominator;
0
和#
一样是一个有效的占位符,似乎只是使用了右起第一个占位符(即100
中的0
) .
您可以将该部分硬编码为 '
as
string fraction = numerator.ToString("#/'"+ denominator +"';-#/'" + denominator +"';0");
产生-7/100
不确定这是 100% 的错误,但行为确实很奇怪。我的任务是正确格式化分数。例如如果:
int numerator = -7;
int denominator = 100;
然后如果应用下一行代码:
string fraction = numerator.ToString("#/"+ denominator +";-#/" + denominator +";0");
根据微软的节分隔符逻辑:https://msdn.microsoft.com/en-us/library/0c899ak8%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396#The
如果分子为正 (7),则应生成“7/100”,如果分子为负 (-7),则应生成“-7/100”,如果分子为 0,则应生成“0”。因为格式字符串看起来像这样“#/100” ;-#/100;0"
但由于某些原因,它不能正常用于负面情况。如果分子为正,则所有行为均符合预期,但如果由于某种原因为负,它将替换生成的字符串中的最后一位。所以我最终得到这样的输出:“-/107”。有什么想法吗?
您的格式字符串是“#/100;-#/100;0”。这是一个非常奇怪的格式字符串。你是说:
- 如果数字是正数,则使用“#/100”的格式。
- 如果数字为负数,则使用“-#/100”的格式。
- 如果数字为零,则使用格式“0”。
对于前两种情况,您都有 3 个数字占位符,第一个是可选的(因此只有在有 3 个或更多数字要打印时才会出现),最后两个是必需的(所以他们会显示 0 否则)。 "/" 和 "1" 字符没有特殊含义,因此它们将按原样显示。
所以我们有:
1 => /101
12 => /112
123 => 1/123
-1 => -/101
-12 => -/112
-123 => -1/123
所有这些都按照记录工作 - 只是不是您希望它如何工作。听起来您可能想要 quote 100,这样 0 就不会成为占位符。格式字符串“#/'100';-#/'100';0”产生的输出为:
1 => 1/100
12 => 12/100
123 => 123/100
-1 => -1/100
-12 => -12/100
-123 => -123/100
...但我建议在生成时完全不使用格式字符串:
string text = numerator == 0 ? "0" : numerator + "/" + denominator;
0
和#
一样是一个有效的占位符,似乎只是使用了右起第一个占位符(即100
中的0
) .
您可以将该部分硬编码为 '
as
string fraction = numerator.ToString("#/'"+ denominator +"';-#/'" + denominator +"';0");
产生-7/100