2011-10-24 60 views
11

Có cách nào nhanh chóng để chuyển đổi các số có ký hiệu số mũ (ví dụ: "0.5e10" hoặc "-5e20") sang thập phân hay kép?Chuyển đổi các số có ký hiệu số mũ từ chuỗi thành hai hoặc số thập phân

Cập nhật: Tôi tìm thấy Parse a Number from Exponential Notation nhưng các ví dụ sẽ không hoạt động đối với tôi trừ khi tôi chỉ định văn hóa.

Giải pháp:

double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture); 
+0

Bạn có thể sử dụng như sau: http://msdn.microsoft.com/en-us/library/system.math.exp.aspx –

+0

@Ramhound: Điều đó không lý tưởng vì một số lý do; chưa kể đến là sử dụng các hoạt động điểm nổi đắt tiền, là không cần thiết phức tạp, và được thiết kế cho một hoạt động tổng quát hơn x^y trong đó x và y là cả hai thực. – Noldorin

+0

Bạn đã thử nghiệm gấp đôi.TryParse và thập phân.TryParse? –

Trả lời

13

Nếu văn hóa của bạn sử dụng . để tách các số thập phân, chỉ cần double.Parse("1.50E-15") nên làm việc.

Nếu văn hóa của bạn sử dụng gì khác (ví dụ ,) hoặc bạn muốn chắc chắn các công trình ứng dụng của bạn giống nhau trên mỗi máy tính, bạn nên sử dụng InvariantCulture:

double.Parse("1.50E-15", CultureInfo.InvariantCulture) 
+0

Đã tìm ra điều này, nhưng đây là câu trả lời làm việc đầu tiên. – OMGKurtNilsen

+5

Vâng, tôi nhận thấy. Lần sau, bạn nên đăng giải pháp làm câu trả lời và không chỉnh sửa câu hỏi. – svick

6

Chuẩn double.Parse hoặc decimal.Parse phương pháp thực hiện công việc ở đây.

Ví dụ:

// AllowExponent is implicit 
var number1 = double.Parse("0.5e10"); 
Debug.Assert(number1 == 5000000000.0); 

// AllowExponent must be given explicitly 
var number2 = decimal.Parse("0.5e10", NumberStyles.AllowExponent); 
Debug.Assert(number2 == 5000000000m); 

Ngoài ra, xem bài viết MSDN Parsing Numeric Strings để biết thêm thông tin. Miễn là tùy chọn NumberStyles.AllowExponent được chỉ định theo phương thức Parse (theo mặc định là double), việc phân tích cú pháp các chuỗi như vậy sẽ hoạt động tốt.

NB: Khi người hỏi chỉ ra, ký hiệu số mũ của "e10" chẳng hạn không hoạt động trong tất cả các nền văn hóa. Chỉ định văn hóa en-US tuy nhiên đảm bảo rằng nó hoạt động. Tôi nghi ngờ CultureInfo.InvariantCulture cũng nên làm các trick.

+0

Tôi tiếp tục nhận được "Chuỗi đầu vào không đúng định dạng." – OMGKurtNilsen

+0

@Dylan double test = double.Parse ("1.509e10", NumberStyles.Float); // "Chuỗi đầu vào là không đúng định dạng." – OMGKurtNilsen

+1

Đối với 'thập phân.Parse', bạn cần phải xác định NumberStyles một cách rõ ràng. – Noldorin

2

@Noldorin là đúng thử mã này:

string str = "-5e20"; 
double d = double.Parse(str); 
Console.WriteLine(str); 
+2

Cảm ơn bạn đã xác nhận. Điều này có lẽ nên thuộc về như một bình luận mặc dù, vì nó chỉ tái lặp lại những gì tôi đã làm.:-) – Noldorin

+0

Tôi biết tôi ban đầu đã thêm bình luận nhưng sau đó nhận ra bạn không thể đặt một khối mã trong một bình luận –

+0

Không phải lo lắng. Cảm thấy tự do để chỉnh sửa câu trả lời của tôi, sau khi tất cả (bạn có privelege tại đại diện của bạn có?). Nếu không, ví dụ là có ngay bây giờ. Chúng tôi có thể thêm chúng cùng một lúc. – Noldorin

0

các Math.Round hiện nó tốt, nó sẽ Reder số để xóa, dưới đây là cách sử dụng số điện thoại:

Math.Round(Double.Parse("3,55E-15"),2) 
Các vấn đề liên quan