홈>
내 bash 터미널에서 프로그램에 doubles 값을 입력 할 수 없습니다. 아래는 왜 그런 일이 발생했는지 알아내는 데 사용한 코드입니다.
이것은 테스트를위한 코드입니다 :
import java.util.*;
public class DoubleTest {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
double n = sc.nextDouble();
System.out.println(n);
}
}
다음 입력 5로 예상 결과를 얻습니다.
user $ java DoubleTest
5
5.0
이제 흥미로운 부분입니다. 코드에 선언 된대로 Double을 입력하면 다음과 같은 일이 발생합니다.
user $ java DoubleTest
5.0
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at DoubleTest.main(DoubleTest.java:6)
5,0의 값을 주면 결과는 다음과 같습니다.
user $ java DoubleTest
5,0
5.0
그래서
.
는
(도트)가 작동하지 않지만 대신
,
(쉼표)입니다.
이미 로케일을 확인했지만 문제가되지는 않습니다.
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
-
답변 # 1
관련 자료
- java - 이중 형식 변경 - 쉼표로 점
- c++ - QInputDialog는 getDouble ()에 점 대신 쉼표를 표시합니다
- delphi - 정수 대신 double 값을 갖는 TImage 너비
- c++ - std - : unordered_set :: load_factor, 왜 double 대신 float가됩니까?
- Java를 사용하여 Excel에서 데이터를 읽을 때 Double 값 대신 정수 값만 추출하는 방법
- input - 쉼표가 아닌 점으로 Java에서 이중 값을 입력하고 싶지만 예외가 발생합니다
- c# - UWP 목록 상자에서 단일 이벤트 대신 이중 클릭 이벤트를 얻는 이유는 무엇입니까?
- access vba - 스플릿 기능에서 더블 쉼표 건너 뛰기
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- vue.js - axios를 사용하여 서버에 이미지를 업로드하는 방법
- python - 문자열에서 특정 문자 제거
와이즈 비즈 아마도
Scanner
를 사용하고 있습니다 와이즈 비즈Denmark
를 사용하므로 미국 기본Locale
대신 이중 변수를 포맷하는 방법 .확인하는 방법은 다음과 같습니다 (스캐너에서 덴마크 로캘을 사용하도록 스캐너를 로컬로 설정하려고 시도했으며 실험과 동일한 방식으로 작동 함).
이 경우 미국
.
를 사용하도록 설정해야합니다. 또는 원하는 다른 것 :또는
Locale
를 모두 수락해야하는 경우 그리고Scanner sc = new Scanner(System.in); sc.useLocale(Locale.US); System.out.println(sc.locale().getDisplayCountry());
단순히 포맷터를 사용할 수 있습니다. 다음은,
의 한 예입니다..
사용NumberFormat
를 올바르게 형식화하는 로케일 그리고France
:코드에서 다음과 같은 작업을 수행합니다.
NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE); double doubleComma = numberFormat.parse("5,0").doubleValue(); double doubleDot = numberFormat.parse("5.0").doubleValue();