Почему стандартный числовой формат процентов включает пробел?

StackOverflow https://stackoverflow.com/questions/516549

  •  21-08-2019
  •  | 
  •  

Вопрос

Предыстория

У меня есть несколько десятичных значений, которые я показываю в виде строк на веб-странице как часть более крупной строки.Для вывода я начал использовать строку стандартного числового формата.Например.

myDecimal.ToString("P0")

А 0 после P говорит, что мне не нужны десятичные знаки.Насколько это возможно, это работает, поскольку мой результат выглядит примерно так:

Рассчитано, как указано выше, на основе поэтапной минимальной ставки взносов компании в размере 2 %.

Космическая проблема

Я действительно хочу избавиться от этого пробела между числом и знаком процента, поскольку в некоторых случаях он разбивается на строки.Кроме того, я предпочитаю, чтобы % соответствовал числу.

Возможные обходные пути

1.html/css решение

я мог бы поставить <nobr> тег или <span style="white-space: nowrap;"> вокруг него.Но это кажется неудобным, и в любом случае я предпочитаю, чтобы % граничил с числом, так как я думаю, что это выглядит лучше.Именно так мы бы писали это в отчетах в этом уголке леса, поэтому я хочу, чтобы это было так на веб-странице.

2.Строка пользовательского формата

В конечном итоге я собираюсь использовать строку пользовательского числового формата, например.

myDecimal.ToString("0%")

Вопрос

Чаще ли проценты отображаются с пробелом между числом и знаком процента?Это меня бы удивило, но вполне возможно.

Есть ли способ сообщить Строка стандартного числового формата Мне не нужно место?

Есть ли какие-либо недостатки в использовании Строка пользовательского числового формата через Строка стандартного числового формата?

Хорошо, признаю, это был более чем один вопрос. Дополнительный балл, если вы ответите на все.

Это было полезно?

Решение

Смотря на http://www.nasdaq.com/ или http://finance.yahoo.com/ кажется, что знак процента сразу после числа без пробела между ними является обычным явлением :)

Посмотри на http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.percentpositivepattern.aspx

Вероятно, это зависит от культуры, значение по умолчанию (инвариант) равно n %.

Другие советы

Это сработало для меня:

System.Globalization.CultureInfo  newCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
newCulture.NumberFormat.PercentPositivePattern = 1;  // Avoid putting a space between a number and its percentage
System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;

Чтобы изменить значение PercentPositivePattern по умолчанию, необходимо создать новый объект CultureInfo и использовать его вместо значения по умолчанию, которое, вероятно, «en-us».(В качестве альтернативы вы можете указать «en-za» в качестве культуры в вашем Web.config, но я не рекомендую это делать по понятным причинам.)

Есть отличный пост на Форумы ASP объясняя, как все это сделать.См. код, написанный третьим автором (m0brien).Я скопировал его точный код в метод Page_Load моей главной страницы, чтобы мне больше не приходилось об этом думать.

Конечно, вы всегда можете просто выполнить String.Format().Replace(" ", String.Empty), но вам придется делать это по всему сайту.Плюс, честно говоря, что в этом интересного, когда можно засучить рукава и поиграть со своими глобализационными ценностями???

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top