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