Почему стандартный числовой формат процентов включает пробел?
-
21-08-2019 - |
Вопрос
Предыстория
У меня есть несколько десятичных значений, которые я показываю в виде строк на веб-странице как часть более крупной строки.Для вывода я начал использовать строку стандартного числового формата.Например.
myDecimal.ToString("P0")
А 0
после P
говорит, что мне не нужны десятичные знаки.Насколько это возможно, это работает, поскольку мой результат выглядит примерно так:
Космическая проблемаРассчитано, как указано выше, на основе поэтапной минимальной ставки взносов компании в размере 2 %.
Я действительно хочу избавиться от этого пробела между числом и знаком процента, поскольку в некоторых случаях он разбивается на строки.Кроме того, я предпочитаю, чтобы % соответствовал числу.
Возможные обходные пути
1.html/css решениея мог бы поставить <nobr>
тег или <span style="white-space: nowrap;">
вокруг него.Но это кажется неудобным, и в любом случае я предпочитаю, чтобы % граничил с числом, так как я думаю, что это выглядит лучше.Именно так мы бы писали это в отчетах в этом уголке леса, поэтому я хочу, чтобы это было так на веб-странице.
В конечном итоге я собираюсь использовать строку пользовательского числового формата, например.
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), но вам придется делать это по всему сайту.Плюс, честно говоря, что в этом интересного, когда можно засучить рукава и поиграть со своими глобализационными ценностями???