Пользовательский Числовой Формат Ошибка Отрицательного раздела
Не уверен, что это 100% ошибка, но поведение действительно странное. Моя задача - правильно отформатировать дробь. Например, если:
int numerator = -7;
int denominator = 100;
Затем, если применяется следующая строка кода:
string fraction = numerator.ToString("#/"+ denominator +";-#/" + denominator +";0");
что соответствует логике разделителя разделов Microsoft: https://msdn.microsoft.com/en-us/library/0c899ak8%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
должен выдавать "7/100", если числитель положительный (7), "-7/100", если числитель отрицательный (-7), и "0", если числитель 0. Поскольку строка формата выглядит следующим образом "#/100;-#/100;0"
Но по какой-то причине это не работает должным образом для негативного сценария. Если числитель положительный, все ведут себя как ожидалось, но если он по какой-то причине отрицательный, он заменит последнюю цифру в производимой строке. Таким образом, я получаю вывод примерно так: "- /107". Какие-нибудь мысли?
2 ответа
Ваша строка формата "#/100;-#/100;0". Это очень странная строка формата. Вы говорите:
- Если число положительное, используйте формат "#/100".
- Если число отрицательное, используйте формат "-#/100".
- Если число равно нулю, используйте формат "0".
Для обоих первых двух случаев у вас есть заполнители из трех цифр, первый из которых является необязательным (поэтому будет отображаться только при наличии 3 или более цифр для печати), а два последних из них требуются (поэтому они будут покажи 0 в противном случае). Символы "/" и "1" не имеют специального значения, поэтому они будут отображаться как есть.
Итак, мы имеем:
1 => /101
12 => /112
123 => 1/123
-1 => -/101
-12 => -/112
-123 => -1/123
Все это работает так, как задокументировано - только не так, как вы хотели, чтобы это работало. Похоже, вы, возможно, хотели указать 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
является действительным заполнителем так же, как #
, кажется, что используется просто первый заполнитель справа (который является 0
в 100
).
Вы можете жестко закодировать эту часть с '
как
string fraction = numerator.ToString("#/'"+ denominator +"';-#/'" + denominator +"';0");
который дает -7/100