2014-04-05 19 views
7

Tôi có một pi mâm xôi với ngôn ngữ hệ thống được đặt thành "de_DE.UTF-8" và phiên bản mono 3.28 được cài đặt. chương trình của tôi cần phải chuyển đổi Strings vào Doubles, nhưng tôi chạy vào một vài vấn đề:Double.Parse không thành công bằng tiếng Đức

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

Làm việc tốt.

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

Ném FormatException, điều kỳ lạ.

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

Ném FormatException quá;

Điều thú vị là nếu tôi thay đổi ngôn ngữ hệ thống (sudo raspi-config) thành "en-GB.UTF-8", tất cả các chức năng hoạt động như mong đợi. Bất cứ ai cũng biết làm thế nào để giải quyết điều này như một người dùng Đức tôi muốn sử dụng các thiết lập hệ thống của Đức.

+3

Bạn nên gửi lỗi với dự án Mono. Hoặc tự khắc phục, phần lớn là điểm của Nguồn mở. –

+1

Vấn đề Imo không phải là với văn hóa/phân tích cú pháp chính nó nhưng với Mono xử lý nổi/đôi trên ARMHF (Raspberry PI). Người dùng có thể xác nhận rằng anh ta đang sử dụng 3.2.8 với chuyển đổi đơn âm vì các phiên bản trước 3.2.7 có vấn đề với phao nổi trên armhf. –

+0

Phiên bản đơn âm của tôi: Phiên bản trình biên dịch đơn JIT 3.2.8 (Debian 3.2.8 + dfsg-4 + rpi1) Bản quyền (C) 2002-2014 Novell, Inc, Xamarin Inc và các cộng tác viên. www.mono-project.com \t TLS: __thread \t SIGSEGV: bình thường \t Notifications: epoll \t Kiến trúc: armel, VFP + cứng \t Disabled: none \t Misc: softdebug \t LLVM: được hỗ trợ, không được kích hoạt. \t GC: sgen Có vẻ như mono 3,27 vừa mang cổng armhf ban đầu. @HansPassant Tôi nhìn vào nguồn của Double.cs. Tôi nghĩ rằng /master/mcs/class/corlib/System/Double.cs tại 533 sau đây là làm điều này. Nhưng tôi không thể tìm mã ParseImpl. – user3469517

Trả lời

1

Lỗi được sửa trong mono 3.4 chưa được tải lên trong mâm xôi repo

0

Thử chuyển NumberStyles.AllowDecimalPoint làm thông số kiểu. Có thể có một cuộc xung đột đơn giản vì cả hai dấu hiệu có thể được diễn giải theo những cách khác nhau.

+1

Theo [tài liệu] (http://msdn.microsoft.com/en-us/library/system.globalization .numberstyles% 28v = vs.110% 29.aspx), 'NumberStyles.Float' đã bao gồm' NumberStyles.AllowDecimalPoint', và nó * không * bao gồm 'NumberStyles.AllowThousands'. Ngay cả khi đó là trường hợp, không nên có bất kỳ "xung đột", như được đưa ra một nền văn hóa cụ thể, không phải của các biểu tượng "có thể được giải thích theo những cách khác nhau". –

+1

Ồ tốt. Có lẽ nên đọc thêm một chút. Chỉ cần trộn nó với Double.parse chỉ sử dụng một chuỗi như một tham số. –

Các vấn đề liên quan