Запятые не имеют значения при разборе номера английской локали.Необработанные типы Java Number
не сохранят никакой информации о форматировании - это просто данные презентации.
Логика для inputText
с NumberConverter выглядит следующим образом:
NumberFormat formatter = NumberFormat.getNumberInstance(Locale.ENGLISH);
// NumberConverter turns input string into Number
Number number = formatter.parse("10,10");
// Expression language coerces the Number to BigDecimal
BigDecimal decimal = BigDecimal.valueOf(number.doubleValue());
// On output back to browser:
String output = formatter.format(decimal);
System.out.println(output);
outputText
не имеет преобразователя, поэтому просто вызовет toString()
для привязки его значения (BigDecimal
.)
Я ожидаю, что результаты будут 1,010
и 1010.0
соответственно.
Поведение NumberConverter
описано в javadoc .Правила приведения типа EL задокументированы в JSR 245 :
Привести A к типу номера N
- Если Ais Number, тихо принудительно введите N, используя следующий алгоритм:
- Если N равно
BigDecimal
, - Если A равно
BigInteger
, вернуть new BigDecimal(A)
- В противном случае верните
new BigDecimal(A.doubleValue())
Если вы хотите использовать локаль браузера пользователя для интерпретации числовых форматов, удалите атрибут локали.Если вы хотите, чтобы преобразователь обрабатывал и точки, и запятые как десятичные разделители, предоставьте свою собственную реализацию Converter .