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

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

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

В частности, меня интересует, как программное обеспечение, которое воспринимается как удобное в иностранном регионе, делает это. Очевидно, что несложно сказать: «хотя и следует использовать десятичные POINT», но это не особенно «дружественно».


person Chris Pousset    schedule 24.05.2010    source источник
comment
Проверьте этот вопрос, так как он каким-то образом говорит об этой же ситуации... stackoverflow.com/q/5861209/114029   -  person Leniel Maccaferri    schedule 02.05.2011


Ответы (1)


Мы столкнулись именно с этой проблемой при составлении запросов для нашего продукта с использованием 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

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

person paxdiablo    schedule 12.04.2012