2014-04-05 2 views
7

Ich habe eine Raspberry Pi mit Systemsprache auf "de_DE.UTF-8" und Mono-Version 3.28 installiert. Meine Programme müssen Strings in Doubles konvertieren, aber ich lief in ein paar Probleme:Double.Parse schlägt im deutschen Gebietsschema fehl

Double.Parse("500", NumberStyles.Float, CultureInfo.InvariantCulture); 

ganz gut funktioniert.

Double.Parse("500.123", NumberStyles.Float, CultureInfo.InvariantCulture); 

Wirft FormatException, was ist komisch.

Double.Parse("500,123", NumberStyles.Float, CultureInfo.GetCultureInfo("de-DE")); 

Wirf auch FormatException;

Die lustige Sache ist, wenn ich meine Systemsprache (sudo raspi-config) zu "en-GB.UTF-8" ändere, funktionieren alle Funktionen wie erwartet. Jeder weiß, wie man das als deutscher Benutzer löst. Ich möchte deutsche Systemeinstellungen verwenden.

+3

Sie sollten einen Fehler mit dem Mono-Projekt einzureichen. Oder repariere es selbst, hauptsächlich den Punkt von Open Source. –

+1

Imo Problem ist nicht mit Culture/Parsing selbst aber mit Mono Handhabung Float/Double auf ARMHF (Raspberry PI). Kann der Benutzer bestätigen, dass er 3.2.8 mit mono - version benutzt, da Versionen vor 3.2.7 Probleme mit floats auf armhf hatten. –

+0

Meine Mono - Version: Mono-JIT-Compiler-Version 3.2.8 (Debian 3.2.8 + dfsg-4 + rpi1) Copyright (C) 2002-2014 Novell, Inc., Xamarin Inc und Mitwirkende. www.mono-project.com \t TLS: __thread \t SIGSEGV: normal \t Hinweise: epoll \t Architektur: armel, vfp + hart \t Behinderte: keine \t Sonstiges: softdebug \t LLVM: unterstützt wird, nicht aktiviert. \t GC: sgen Es scheint Mono 3.27 brachte nur anfängliche Armhf Port. @HansPassant Ich schaute in Quelle von Double.cs. Ich denke, /master/mcs/class/corlib/System/Double.cs bei 533 folgt dies. Aber ich kann nicht für Code ParseImpl finden. – user3469517

Antwort

1

Der Fehler wird in Mono 3.4 fixiert, die in Himbeer-Repo noch nicht hochgeladen

0

Versuchen Sie, NumberStyles.AllowDecimalPoint als Stilparameter zu übergeben. Es könnte einen einfachen Konflikt geben, weil beide Zeichen unterschiedlich interpretiert werden könnten.

+1

Laut [docs] (http://msdn.microsoft.com/en-us/library/system.globalization .numberstyles% 28v = vs.110% 29.aspx), 'NumberStyles.Float' enthält bereits' NumberStyles.AllowDecimalPoint', und nicht 'NumberStyles.AllowThousands'. Selbst wenn dies der Fall wäre, sollte es keinen "Konflikt" geben, da in einer bestimmten Kultur keines der Symbole "auf unterschiedliche Weise interpretiert werden könnte". –

+1

Oh gut. Wahrscheinlich hätte ich ein bisschen weiter lesen sollen. Mischen Sie es einfach mit Double.parse mit nur einer Zeichenfolge als Parameter. –