Почему стандартный числовой формат для процентов включает пробел?
Предыстория
У меня есть некоторые десятичные значения, которые я отображаю в виде строк на веб-странице как часть более крупной строки. Я начал с использования стандартной строки числового формата для вывода этого. Например,
myDecimal.ToString("P0")
0
после P
говорит, что я не хочу десятичных знаков. Это работает, насколько это возможно, в том, что мой выход в конечном итоге выглядит примерно так:
пространство Проблема Я действительно хочу избавиться от этого пространства между числом и знаком процента, так как в некоторых случаях оно разбивается на линии. И кроме того, я предпочитаю, чтобы % бодался с числом.Рассчитано, как указано выше, на основе поэтапной минимальной ставки взноса компании в размере 2 %
Возможные Обходные Пути
1. html / css решениеЯ мог бы поместить вокруг него тег <nobr>
или <span style="white-space: nowrap;">
. Но, это чувствует себя неловко, и в любом случае я предпочитаю%, чтобы бодаться прямо до числа, поскольку я думаю, что это выглядит лучше. Вот как мы пишем об этом в отчетах в этой лесной глуши, так вот как Я хочу, чтобы это было на веб-странице.
Я собираюсь в конечном итоге использовать пользовательскую строку числового формата, например
myDecimal.ToString("0%")
Вопрос
Является ли более распространенным отображение процентов с пробелом между числом и знаком процента? Это удивило бы меня, но может быть.
Есть ли способ сказать строке стандартного числового формата , что мне не нужно пространство?
Есть ли какой-либо недостаток в использовании пользовательского числового формата Строка поверх строки стандартного числового формата ?
Хорошо-я признаю, что это был не один вопрос-дополнительный кредит, если вы ответите на них все.3 ответа:
Глядя на 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" в качестве культуры в вашем веб-сайте.конфиг, но я не рекомендую этого делать по понятным причинам.)
Есть отличный пост на ASP форумах, объясняющий, как все это сделать. Смотрите код, написанный третьим плакатом (m0brien). Я скопировал его точный код в метод Page_Load моей главной страницы, так что что мне больше не нужно об этом думать.
Конечно,вы всегда можете просто сделать строку.Формат().Заменить ( "" , Строка.Пустой), но вам придется делать это на всем вашем сайте. Кроме того, честно говоря, где в этом удовольствие, когда вы можете засучить рукава и играть со своими глобализационными ценностями???