2013-02-25 33 views
5

Tôi muốn phân tích giá trị double thành một số string. Tôi muốn số của tôi có số chữ số được chỉ định (mà tôi sẽ không biết cho đến khi chạy). Nếu con số này có thể được biểu diễn bằng một giá trị khác không theo số chữ số thì đây là những gì tôi muốn. Nếu con số xuất hiện như số không như thế này, tôi muốn nó được thể hiện bằng ký hiệu khoa học.Chỉ sử dụng ký pháp khoa học nếu cần

Một số ví dụ sẽ làm cho điều này rõ ràng hơn, điều này giả định tôi muốn 3 chữ số:

Value: 0,2367 Output: "0,23"

Value: 0,00367 Output: "3.67E-3"

Giá trị: 22.3 Đầu ra: "22,3"

Value: 3364,0 Output: "3.36E3"

Công việc của tôi xung quanh giải pháp sẽ sử dụng ToString() phương pháp và Nnumeric format string và nếu nó kết quả trong zero của trở lại chuỗi định dạng E, nhưng điều này cảm thấy như phát minh lại bánh xe. Có ai biết nếu một phương pháp được xây dựng trong để làm điều này?

+2

Bạn sẽ không muốn 2.37E-1 cho người đầu tiên? –

+0

Thực ra, sở thích của tôi sẽ chỉ sử dụng ký hiệu khoa học nếu tất cả các giá trị là 0, nhưng cả hai cách sẽ đủ. – Fr33dan

Trả lời

14

Bạn đã xem sử dụng General Number Format Specifier chưa?

Tổng ("G") format specifier chuyển đổi một số sang nhỏ gọn nhất của một trong hai điểm cố định hoặc ký hiệu khoa học, tùy thuộc vào loại về số lượng và liệu một specifier chính xác là hiện tại.

Một số mẫu từ các tài liệu:

double number; 

number = .0023; 
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); 
// Displays 0.0023 

number = 1234; 
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture)); 
// Displays 1.2E+03 

number = Math.PI; 
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture)); 
// Displays 3.1416 
+0

Tôi không biết làm thế nào tôi quản lý để bỏ qua điều này trong tài liệu. – Fr33dan

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