#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%"));
Комментарии:
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);