Javas Decimalformat : 그룹화 된 소수점으로 "유효하지 않은"입력을 거부하는 방법은 무엇입니까?
-
16-09-2019 - |
문제
다음 숫자를 사용할 때 :
NumberFormat amountFormat = NumberFormat
.getNumberInstance(I18N.getThreadLocale());
amountFormat.setMaximumFractionDigits(2);
amountFormat.setMinimumFractionDigits(2);
구문 분석을 통해 다음과 같은 결과를 얻습니다
System.out.println(amountFormat.parse(value));
- 10,50 => 1050
- 10,5 => 105
- 0,25 => 25
나는 locale.english에서 ","는 그룹 분리기라는 것을 알고 있습니다. 그러나 나는 위의 결과가 의미가 있다고 생각하지 않습니다. 그리고 우리의 고객은이 형식에 대해 이상합니다.
이 그룹화를 어떻게 비활성화 할 수 있습니까?
다음과 같은 결과를 얻고 싶습니다.
- 10,50 => parseexception
- 10,5 => parseexception
- 0,25 => parseexception
이 작업을 수행하는 표준 방법이 있습니까? 아니면 내 NumberFormat를 프로그래밍해야합니까?
해결책
한 가지 문제는 그룹화 캐릭터 ( ','영어 로케일)입니다. NumberFormat 인스턴스에 대한 그룹화 지원을 비활성화하려면 SetGroupingused (False)를 간단히 호출 할 수 있습니다.
그러나 이것은 다른 문제로 이어집니다. 즉, 알 수없는 문자에 도달 할 때까지 문자열의 시작 부분에서 숫자가 구문 분석됩니다. 그룹화가 비활성화되면 Parse ( "12foo")가 12 번 반환됩니다. 전체 입력 문자열이 실제로 구문 분석되었는지 확인하려면 구문 분석 인수와 함께 구문 분석 방법을 사용하고 인덱스를 확인해야하며 입력 문자열이 끝까지 구문 분석되었는지 또는 구문 분석기가 문자열의 이전 위치에서 정지했는지 여부를 확인해야합니다.
제휴하지 않습니다 StackOverflow