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


Предыстория

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

myDecimal.ToString("P0")

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

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

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

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

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

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

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

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

myDecimal.ToString("0%")

Вопрос

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

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

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

Хорошо-я признаю, что это был не один вопрос-дополнительный кредит, если вы ответите на них все.
3 9

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 моей главной страницы, так что что мне больше не нужно об этом думать.

Конечно,вы всегда можете просто сделать строку.Формат().Заменить ( "" , Строка.Пустой), но вам придется делать это на всем вашем сайте. Кроме того, честно говоря, где в этом удовольствие, когда вы можете засучить рукава и играть со своими глобализационными ценностями???