Разделение аргументов функции в локалях с запятой в качестве десятичного маркера - PullRequest
3 голосов
/ 24 мая 2010

В локалях, например французских, с запятой в качестве десятичного индикатора (где «5,2» означает пять и две десятых), как пользователи отделяют аргументы функции друг от друга?

Например, во многих языках программирования / написания сценариев я мог бы указать MAX (1.5, X) в локали EN-US.Как избежать неоднозначности между запятой в качестве десятичного индикатора и в качестве разделителя аргументов?

В частности, меня интересует, как это делает программное обеспечение, которое воспринимается как дружественное к пользователю в иностранной локали.Понятно, что говорить «хотя и следует использовать десятичные ТОЧКИ» несложно, но это не особенно «дружелюбно».

1 Ответ

2 голосов
/ 12 апреля 2012

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

У нас был запрос в следующем формате:

select fn (COLUMN_NAME,5.2) from TABLE_NAME

и 5.2 фактически был вставлендинамически с помощью нашего программного обеспечения, основанного на выборе пользователя (на данный момент забудьте о инъекционных атаках, они были предотвращены с помощью других средств).

В местах, где «пять и две десятые» были записаны как 5,2 (чертЕвропейцы), мы получили:

select fn (COLUMN_NAME,5,2) from TABLE_NAME

, на что DB2 горько жаловалась.

Решение, данное IBM, заключалось в том, чтобы запятая разделитель имела пробелыстороны и десятичные запятые не:

select fn (COLUMN_NAME , 5,2) from TABLE_NAME

Но вы обнаружите, что многие языки решают эту проблему в точно не дружественным образом, о котором вы упомянули.Ни один из стандартов, подобных ISO C (ну, во всяком случае, ни одного из известных мне), не позволяет объявлять постоянное число как 5,2, несмотря на тот факт, что ISO во многом является «интернационализированной» организацией.Они также не требуют, чтобы ключевые слова, такие как if, while и for были локализованы на арабский, монгольский или клингонский: -)

...