Warum wird Infinity in der Windows 10-Konsole als "8" gedruckt?
War ich testen, was zurückgegeben wurde aus der Abteilung einschließlich der Nullen, d.h. 0/1
, 1/0
und 0/0
. Dafür habe ich etwas ähnlich dem folgenden:
Console.WriteLine(1d / 0d);
Aber dieser code druckt 8
nicht Infinity
oder eine andere string-Konstante wie PositiveInfinity
.
Vollständigkeit halber alle folgenden print -8
:
Console.WriteLine(1d / 0d);
double value = 1d / 0d;
Console.WriteLine(value);
Console.WriteLine(Double.PositiveInfinity);
Sowie Console.WriteLine(Double.NegativeInfinity);
Drucke -8
.
Warum dieser Unendlichkeit print 8?
Für diejenigen von Euch, die scheinen zu denken, dies ist ein infinity-symbol nicht acht das folgende Programm:
Console.WriteLine(1d / 0d);
double value = 1d / 0d;
Console.WriteLine(value);
Console.WriteLine(Double.PositiveInfinity);
Console.WriteLine(8);
Ausgänge:
Kommentar zu dem Problem - Öffnen
Sie finden Sie unter
∞
ist das Zeichen der Unendlichkeit. nur drehen Sie Sie um 90 Grad, um es zu sehen 8 Sind Sie sicher, dass es eine tatsächliche
8
, nicht in irgendeinem komischen Unicode-Zeichen für die Unendlichkeit, um 90 Grad gedreht? Das könnte sich ändern, basierend auf Ihrem Gebietsschema. Ich versuchte es auf dotnetfiddle.net und es gibt - Infinity
. @TheLethalCoder Bitte tun, was Sinatr vorgeschlagen, oder drucken Sie die Ausgabe von
Double.Positiveinfinity gibt.ToString()[0] == '8'
. Es gibt einige exotische Zeichen, die sehr ähnlich Aussehen, um andere in einigen Schriften. Auch, was Sprache ist Ihr computer konfiguriert? Dies scheint ein Windows-10-problem. In Windows 8.1 hatte ich eine infinity-symbol. Aktualisiert vor ein paar Tagen auf Windows 10 und nun habe ich eine
8
, auch (Deutsche locale). Ein quick-check wäre zu sehen, was passiert, für
Console.Write("∞");
InformationsquelleAutor der Frage TheLethalCoder | 2016-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher sein, dass die floating-point-Wert ist
+Infinity
wenn der Zähler eine floating point division by zero ist das positiv-Infinity
wenn der Zähler eine Fließkomma-division durch null ist negativ, undNaN
wenn Zähler und Nenner eine floating point division sind beide null. Das ist in der IEEE754-Fließkomma-Spezifikation, das ist das, was C# verwendet.In Ihrem Fall, die Konsole wird die Umwandlung der Unendlichkeit-symbol (das ist manchmal vertreten typographisch wie eine horizontale 8 — ∞) zu einer senkrechten 8.
InformationsquelleAutor der Antwort Bathsheba
Bestimmte Einstellungen (z.B. Kombination von Kulturen, output encoding, etc.) .NETTO wird die Ausgabe der Unicode-infinity-Charakter ∞ (∞ /∞). Die Windows-10-Konsole/terminal-emulator (wieder einmal bestimmte Einstellungen - siehe screenshot unten) - Anzeige diese Unicode-Zeichen wie eine 8.
Beispielsweise auf Windows 10, mit dem unter Einstellungen (beachten Sie die code-Seite) einfach einfügen ∞ in die console zeigt als 8.
BEARBEITEN
Danke an Kommentar von Chris:
Es scheint, dass die Ausgabe-schriftart in Kombination mit der code-Seite ist verantwortlich für die ∞ => 8 Ausgabe auf der Konsole. Wie ihm bekomme ich die richtige Anzeige von ° in alle TrueType-Schriftarten, die ich ausprobiert habe und nur die " 8 "angezeigt, wenn das raster-Schriftarten" ausgewählt ist.
InformationsquelleAutor der Antwort tolanj
Den
8
symbol tritt auf, wenn Windows konvertiert Unicode an einen legacy character encoding. Da es keine Unendlichkeit-symbol in der legacy-Kodierung, verwendet es eine "best-fit" - symbol, standardmäßig, die in diesem Fall ist die Zahl 8. Hier sehen Sie ein Beispiel für Microsofts "windows-1252" - Codierung. Anscheinend, Windows 10 noch Verwendungen, von alten Zeichenkodierungen, die standardmäßig in der Konsole (siehe "Codepages").InformationsquelleAutor der Antwort Peter O.
Anmerkung: Die implizite
.ToString()
Aufruf der Methode beim schreibenDouble.PositiveInfinity
Konsole ist verantwortlich für dieses Verhalten.Aufrufen
Console.WriteLine(Double.PositiveInfinity.ToString(new CultureInfo("en-Us")));
Ergebnisse in der Zeichenfolge "Infinity"
während
Console.WriteLine(Double.PositiveInfinity.ToString(new CultureInfo("fr-Fr")));
Ergebnisse in "+Infini".
Edit: Wie andere haben darauf hingewiesen, in den commets, können Sie nicht vollständig bestätigen meine Ergebnisse. Testen diese auf einem anderen Rechner, bekomme ich die Zeichen
∞
für beide Anrufe.Ausgabe für alle Kulturen, Dank vtortola in die Kommentare.
Fand ich einen (wahrscheinlich) Antwort:
Mit
Console.OutputEncoding = Encoding.Unicode;
ich kann neu erschaffen werden, das Verhalten, das Sie erleben, sind für einige Kulturen, z.B. "ru", "ru-RU" produzieren Sie die Ausgabe8
.InformationsquelleAutor der Antwort Søren D. Ptæus
Repro-code:
Codepage 1252 ist ein ziemlich häufiger Unfall in England, da es das Standard-Windows-Codepage es. Wie es für Westeuropa und Nord-und Südamerika. Viele Gründe zum ändern der Standard-Konsole.OutputEncoding-Eigenschaft programmgesteuert, viele text-Dateien werden verschlüsselt im Jahre 1252. Oder von der Kommandozeile durch Eingabe von
chcp 1252
(chcp == code ändern, Seite) vor dem starten des Programms.Wie Sie sagen können, aus der Zeichensatz unterstützt von 1252, das Infinity-symbol ist nicht verfügbar. Also die Codierung hat sich mit einem Ersatz. Das ist Häufig der
?
Symbol für nicht unterstützte Unicode-codepoints, die Codierung.EncoderFallback-Eigenschaft-Wert für 8-bit-Kodierungen. Aber für 1252, und das alte MS-Dos 850 und 858-code Seiten, die Microsoft-Programmierer beschlossen, für8
. Lustiger Kerl.Die Glyphe ist unterstützt die üblichen Codepage für die Konsole apps auf einer westlichen Maschine. Die 437, entspricht das legacy-IBM-Zeichensatz. Diese Art der Codierung von Katastrophen ist, warum Unicode erfunden wurde. Leider zu spät, um rescue console apps, viel zu viel code um, stützte sich auf die Standard-MS-Dos-code-Seite.
Gleich Doppelt.Positiveinfinity gibt umgewandelt "∞" ist spezifisch für Win10. Es verwendet, um "Unendlich" in früheren Windows-Versionen. Diese Formate können in der Regel geändert werden, mit "Systemsteuerung" > "Sprache" > "Ändern" Datum -, Uhrzeit-oder Zahlenformate > Zusätzliche Einstellungen-Taste, aber die infinity-symbol-die Auswahl ist nicht enthalten in den dialog. Auch nicht abgedeckt durch die registry (HKCU\Control Panel\International"), eher eine große Beaufsichtigung. Es ist LOCALE_SPOSINFINITY in die native winapi. In einer .NET-Programm, das Sie außer Kraft setzen kann programmgesteuert durch das Klonen der CultureInfo-und verändert seine NumberFormatInfo.PositiveInfinitySymbol Eigenschaft. Wie diese:
InformationsquelleAutor der Antwort Hans Passant
"8" für die Unendlichkeit wird an der Konsole angezeigt, wenn ausgeführt .Net 4 und höher, ansonsten Vorherige Versionen anzeigen "Infinity".
Verwenden Der Konsole.OutputEncoding = Encoding.Unicode -; in .Net 4 und höher bekommen wird unendlich angezeigt ∞, aber wirft eine IOException, die in früheren Versionen.
HINWEIS: ich bin mit Visual Studio 2015 Community Edition auf Windows 10 64-bit
InformationsquelleAutor der Antwort JTC