2009-08-23 19 views
10

Làm thế nào để chuyển đổi gấp đôi lên chuỗi mà không có sức mạnh tới 10 đại diện (E-05)Làm thế nào để chuyển đổi gấp đôi lên chuỗi mà không có sức mạnh tới 10 đại diện (E-05)

double value = 0.000099999999833333343; 
string text = value.ToString(); 
Console.WriteLine(text); // 9,99999998333333E-05 

Tôi muốn chuỗi văn bản là 0,000099999999833333343 (hoặc gần đó, tôi không làm khoa học tên lửa :)

tôi đã thử các biến thể sau

Console.WriteLine(value.ToString());  // 9,99999998333333E-05 
Console.WriteLine(value.ToString("R20")); // 9,9999999833333343E-05 
Console.WriteLine(value.ToString("N20")); // 0,00009999999983333330 
Console.WriteLine(String.Format("{0:F20}", value)); // 0,00009999999983333330 

Đổi ng tostring N20 hoặc định dạng F20 có vẻ gần nhất với những gì tôi muốn, nhưng tôi kết thúc với rất nhiều dấu 0, là có một cách thông minh để tránh điều này? Tôi muốn nhận được gần với đại diện kép nhất có thể 0.000099999999833333343

Trả lời

5

Bạn không cần string.Format(). Chỉ cần đặt đúng format string trong phương thức .ToString() hiện có. Một cái gì đó như "N" nên làm.

+0

string.Format với 'N' sẽ thêm dấu phẩy, nó sẽ không chỉ sử dụng số nguyên để tạo thành chuỗi. Ví dụ: 34634859436785434 sẽ hiển thị là "34,634,859,436,785,400.00" –

5

Làm thế nào về

Convert.ToDecimal(doubleValue).ToString() 
+0

Đây là một ý tưởng thông minh, nhưng phạm vi 'float' (' e 3.402823e38') lớn hơn phạm vi 'thập phân' (' 79,228,162,514,264,337,593,543,950,335'). Do đó giá trị lớn sẽ gây ra một ngoại lệ. –

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