Windows 10 콘솔에서 인피니티가 "8"로 인쇄되는 이유는 무엇입니까?
저는 0을 포함한 부서에서 반환된 것을 테스트하고 있었습니다. 0/1
,1/0
그리고.0/0
이를 위해 다음과 유사한 것을 사용했습니다.
Console.WriteLine(1d / 0d);
그러나 이 코드는 인쇄됩니다.8
것은 아니다.Infinity
는 같 다 른 문 상 수 열 자 또 은 와 같은 .PositiveInfinity
.
다음의 모든 인쇄물을 완성하기 위해8
:
Console.WriteLine(1d / 0d);
double value = 1d / 0d;
Console.WriteLine(value);
Console.WriteLine(Double.PositiveInfinity);
그리고.Console.WriteLine(Double.NegativeInfinity);
-8
.
왜 이 무한은 8을 인쇄합니까?
이것이 8이 아닌 무한의 상징이라고 생각하는 사람들을 위해 다음 프로그램이 있습니다.
Console.WriteLine(1d / 0d);
double value = 1d / 0d;
Console.WriteLine(value);
Console.WriteLine(Double.PositiveInfinity);
Console.WriteLine(8);
출력:
부동 소수점 값은 다음과 같습니다.+Infinity
이면, 부소수으 0로나분눈 0양자가수면 ,,-Infinity
부동소수점을 0으로 나눈 분자가 음수이면,NaN
부동 소수점 분할의 분자와 분모가 모두 0인 경우.이것은 IEEE754 부동소수점 사양에 있습니다. 이것은 C#이 사용하는 것입니다.
이 경우 콘솔은 무한대 기호(때로는 가로 8 — ∞로 표시됨)를 세로 8로 변환합니다.
특정 설정(예: 문화 조합, 출력 인코딩 등)이 지정됩니다.NET은 유니코드 무한 문자 ∞(∞ /∞)을 출력합니다.Windows 10 콘솔/터미널 에뮬레이터는 이 유니코드 문자를 8로 표시합니다(아래 스크린샷 참조).
예를 들어 Windows 10의 경우 아래 설정(코드 페이지 참고)에서 콘솔에 ∞을 붙여넣기만 하면 8로 표시됩니다.
편집
Chris의 코멘트에 감사드립니다.코드 페이지와 함께 출력 폰트가 콘솔의 ∞=> 8 문제의 원인인 것 같습니다.그와 마찬가지로 저는 제가 시도한 모든 TrueType 글꼴에서 ∞가 제대로 표시되고 래스터 글꼴'이 선택되면 8개만 표시됩니다.
그8
기호는 Windows에서 유니코드를 레거시 문자 인코딩으로 변환할 때 발생합니다.레거시 인코딩에는 무한대 기호가 없으므로 기본적으로 해당 기호(이 경우 숫자 8)에 "최적 맞춤"을 사용합니다.Microsoft의 "Windows-1252" 인코딩 예제를 참조하십시오.Windows 10은 콘솔에서 기본적으로 레거시 문자 인코딩을 계속 사용합니다("코드 페이지" 참조).
고: 암적시.ToString()
작성 시 메서드 호출Double.PositiveInfinity
콘솔이 이 동작의 원인입니다.
하기 르기Console.WriteLine(Double.PositiveInfinity.ToString(new CultureInfo("en-Us")));
결과는 "Infinity" 문자열이 됩니다.
하는 동안에Console.WriteLine(Double.PositiveInfinity.ToString(new CultureInfo("fr-Fr")));
결과적으로 "+Infini"가 됩니다.
편집: 다른 사람들이 커밋에서 지적했듯이, 그들은 내 결과를 완전히 확인할 수 없습니다.이것을 다른 기계에서 테스트해보면, 나는 그 캐릭터를 이해합니다.∞
두 통화 모두에 대해.
댓글에 있는 vtortola 덕분에 모든 문화에 대한 출력.
저는 다음과 같은 답을 찾았습니다.
용사를 합니다.Console.OutputEncoding = Encoding.Unicode;
ru "하고 있는 할 수 . 예를 들어 "ru", "ru-RU"가 출력을 생성합니다.8
.
재코드:
using System;
using System.Text;
class Program {
static void Main(string[] args) {
var infinity = "\u221e";
Console.OutputEncoding = Encoding.GetEncoding(1252);
Console.WriteLine(infinity);
Console.ReadLine();
}
}
코드 페이지 1252는 기본 Windows 코드 페이지이기 때문에 영국에서는 매우 일반적인 사고입니다.서유럽과 아메리카 대륙을 위한 것처럼.기본 콘솔을 변경해야 하는 많은 이유가 있습니다.OutputEncoding 속성은 프로그래밍 방식으로 많은 텍스트 파일을 1252로 인코딩합니다.에서 또는명에다음입을력니다합서행령다입니▁or▁typing를 입력합니다.chcp 1252
프로그램을 시작하기 전에 (chcp == 코드 페이지 변경).
1252에서 지원되는 문자 집합에서 알 수 있듯이 Infinity 기호는 사용할 수 없습니다.그래서 인코딩은 대체품을 내놓아야 합니다.그것은 종종 입니다.?
지원되지 않는 유니코드 코드 포인트인 인코딩에 대한 글리프입니다.8비트 인코딩에 대한 EncoderFallback 속성 값입니다.그러나 1252와 기존 MS-Dos 850 및 858 코드 페이지를 위해 마이크로소프트 프로그래머는8
재밌는 사람.
글리프는 웨스턴 컴퓨터의 콘솔 앱에 대한 일반 코드 페이지에서 지원됩니다.437은 기존 IBM 문자 집합과 일치합니다.이러한 종류의 인코딩 재해가 유니코드가 발명된 이유입니다.안타깝게도 콘솔 앱을 복구하기에는 너무 늦었고, 기본 MS-Dos 코드 페이지에 의존하는 코드가 너무 많습니다.
더블을 가지다."positive"로 변환된 PositiveInfinity는 Win10에만 해당됩니다.이전 Windows 버전에서는 "Infinity"였습니다.이러한 형식은 일반적으로 제어판 > 언어 > 날짜, 시간 또는 숫자 형식 변경 > 추가 설정 버튼을 사용하여 수정할 수 있지만 무한대 기호 선택은 대화상자에 포함되지 않습니다.또한 레지스트리(HKCU\제어판\)에서 다루지 않습니다.국제적), 오히려 큰 실수입니다.네이티브 winapi의 LOCAL_SPOSINFINITY입니다..NET 프로그램에서 CultureInfo를 복제하고 번호를 변경하여 프로그래밍 방식으로 재정의할 수 있습니다.FormatInfo.양의 무한 기호 속성입니다.다음과 같이:
using System;
using System.Text;
using System.Threading;
using System.Globalization;
class Program {
static void Main(string[] args) {
Console.OutputEncoding = Encoding.GetEncoding(1252);
var ci = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
ci.NumberFormat.NegativeInfinitySymbol = "-Infinity";
ci.NumberFormat.PositiveInfinitySymbol = "And beyond";
Thread.CurrentThread.CurrentCulture = ci;
Console.WriteLine(1 / 0.0);
Console.ReadLine();
}
}
이는 Windows 10(윈도우 10) 영역 설정과 관련이 있습니다.
Windows 10 Pro 버전 2004에서 테스트되었습니다.방금 다음을 수행하여 문제를 해결했습니다.
- 시작에 입력하여 '지역 설정'으로 이동합니다.
- '추가 날짜, 시간 및 지역 설정'을 클릭합니다.
- '날짜, 시간 또는 번호 형식 변경'을 클릭합니다.
- '관리' 탭으로 이동
- '시스템 로케일 변경'을 클릭합니다.
- '베타:전 세계 언어 지원을 위해 Unicode UTF-8을 사용합니다.
PC를 다시 시작하면 8이 »로 인쇄됩니다.
실행 시 콘솔에 무한대의 "8"이 표시됩니다.Net 4 이상, 그렇지 않으면 이전 버전에 "Infinity"가 표시됩니다.
콘솔 사용.출력 인코딩 = 인코딩입니다.유니코드; 에서.Net 4 이상에서는 무한대가 ∞로 표시되지만 이전 버전에서는 IO 예외가 발생합니다.
참고: Windows 10 64비트에서 Visual Studio 2015 Community Edition을 실행하고 있습니다.
언급URL : https://stackoverflow.com/questions/40907417/why-is-infinity-printed-as-8-in-the-windows-10-console
'programing' 카테고리의 다른 글
분리된 헤드에서 수행된 커밋으로 수행할 작업 (0) | 2023.05.12 |
---|---|
Where 절의 SQL Row_Number() 함수 (0) | 2023.05.12 |
Azure 함수 데이터베이스 연결 문자열 (0) | 2023.05.12 |
엔티티 프레임워크에서 저장 프로시저를 호출하는 중 오류 발생 (0) | 2023.05.12 |
커밋 ID가 주어지면 현재 분기에 커밋이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.12 |