Какова строка процентного формата, чтобы всегда отображать знак?

#c# #.net

#c# #.net

Вопрос:

Я хочу отобразить 0,12345 как » 12,3%». Строка формата «P1» или «p1» дает «12,3%». Я пробовал как » P1″, так и » p1″, но безрезультатно.

 string sFoo = 0.12345.ToString("P1");
 

Обновить

Я должен был подчеркнуть, что мне всегда нужен правильный знак, а не » «. Если число равно -0.12345, «P1» работает именно так, как я хочу: «-12,3%».

Комментарии:

1. Вы всегда хотите . если это так, то вы можете попробовать это $" {0.12345.ToString("P1")}"

2. Это не сработает, если число отрицательное

3. Нет. Если число равно -0.12345, я не хочу » -12,3%». Я хочу » «, только если число положительное.

Ответ №1:

Не совсем используется P1 , но результат тот же:

 0.12345.ToString(" #.#%;-#.#%");
 

Если вы предпочитаете хотя бы одну начальную цифру (например, » 0,23%» вместо » .23%»):

 0.12345.ToString(" 0.#%;-0.#%"));
 

То же самое для конечных цифр (например, » 14,0%» вместо » 14%»):

 0.12345.ToString(" 0.0%;-0.0%"));
 

Ссылка: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#the—section-separator

Комментарии:

1. Спасибо. Это работает именно так, как я хочу.

Ответ №2:

     var num = 0.12345;
    var sign = num > 0 ? " " : ""; 
    var output = $"{sign}{num.ToString("P1")}";
 

Комментарии:

1. Спасибо. Это решает проблему, но я специально просил «строку формата».

Ответ №3:

Боюсь, что нет строки формата для отображения положительного знака. Я искал NumberFormatInfo , может ли какой-либо пользовательский формат принять это, но безрезультатно.

Однако вы можете создать некоторые методы расширения в соответствии с вашими потребностями :

 public static string ToSignedPercent(this double input)
{
    return $"{(input >= 0 ? " " : "")}{input.ToString("P1")}";
}

// ...

Console.WriteLine((0.12345).ToSignedPercent()); //  12.3%
Console.WriteLine((-0.6789).ToSignedPercent()); // -67.9%
 

Скрипка

Ответ №4:

Поместите следующее в свой основной метод. по сути, этот подход просто устанавливает для переменной SFoo формат процента с двумя десятичными знаками.

         string sFoo = String.Format("Value: {0:P2}.", 0.12345); // formats as 12.35% 
        Console.WriteLine(sFoo);