Javas Decimalformat : 그룹화 된 소수점으로 "유효하지 않은"입력을 거부하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1680120

문제

다음 숫자를 사용할 때 :

    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 번 반환됩니다. 전체 입력 문자열이 실제로 구문 분석되었는지 확인하려면 구문 분석 인수와 함께 구문 분석 방법을 사용하고 인덱스를 확인해야하며 입력 문자열이 끝까지 구문 분석되었는지 또는 구문 분석기가 문자열의 이전 위치에서 정지했는지 여부를 확인해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top