5

Цифры в шрифте Arial, поставляемом с Windows, являются моноширинными, так как они занимают одно и то же горизонтальное пространство, но, похоже, они пренебрегли предоставлением "моноширинной" версии символа пробела. Это означает, что вы не можете отформатировать столбец из цифр, выровненных по правому краю, скажем, в 12 пробелах, и выровнять правый край. Например:

         1
        12
       123
      1234
     12345
   1234567
  12345678
 123456789
1234567890 

работает, потому что шрифт, используемый для примеров кода, имеет одинаковую ширину с цифрами. Это, однако, не работает, если тот же текст отображается в Arial (я не могу продемонстрировать, потому что я не могу понять, как победить переформатирование SU в данный момент!).

Так уж получилось, что с Tahoma 8 point вы можете обмануть, потому что пробел - это ровно половина числа пикселей в виде цифры, но это грязно и очень специфично.

3 ответа3

6

Попробуйте использовать пробел, который должен быть такой же ширины, как цифра, даже пропорциональным шрифтом:

Пространство фигуры - это типографская единица, равная размеру одной типографской фигуры (цифра или буква), минус начальная буква. Его размер может несколько колебаться в зависимости от того, какой шрифт используется. В шрифтах с одноразмерными цифрами он равен ширине одной цифры.

2

Да, если вы готовы за это заплатить, у монотипа есть разновидность ариала для продажи, которая моноширинная.

С другой стороны, если вам нужен хороший бесплатный шрифт без засечек, который хорошо работает во многих ситуациях, я бы посоветовал взглянуть на droid sans mono

2

Я использовал пространство цифр (согласно предложению user1458424), чтобы выровнять числа и тонкое пространство, чтобы разделить тысячи.

Скажем, в JavaScript или C вы можете ввести соответствующие символы Юникода в любом месте строки:

  • \u2007: рисунок пространства.
  • \u202F: Тонкое пространство.

Использование тонкого пространства в качестве разделителя тысяч имеет ряд существенных преимуществ:

  • Цель понятна как американским, так и европейским читателям, в отличие от использования , или . ,
  • Вы можете добавить его независимо от того, является ли значение >= 1000 , так как пространство невидимо для глаза.
  • Он тоньше обычного пробела, отделяющего знак валюты от значения, что делает его лучше, когда после знака валюты только один пробел.

Ниже я опишу, что я сделал, чтобы получить следующий формат (европейский десятичный разделитель , в этом примере):

  • € 1,75
  • € 100,00
  • € 199,97
  • € 10 350,00
  • € 21 003,18
  • € 121 018,33

    1. Удалить из ввода все нецифровые символы: price.replace(/[^\d]+/g, '') .
    2. Посчитайте «пропущенные символы»: missingDigits = maxDigits - price.length .
    3. Установите выходное значение в '€' .
    4. Для каждой пропущенной цифры добавьте пробел к выводу: '\u2007' .
    5. Добавьте все входные цифры, кроме двух последних, затем десятичный разделитель, а затем последние две цифры ввода.
    6. Вернуть все символы вывода, кроме последних шести, с добавлением пробела '\u202F' , с добавлением последних шести символов.

На входе может быть любое строковое представление числа с или без знаков препинания и недопустимых символов. Вывод будет таким, как видно выше. Вы должны выбрать максимально допустимое количество цифр.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .