2011-02-01 52 views
16

Tôi có một số giá trị float Tôi muốn chuyển đổi thành một chuỗi, tôi muốn giữ nguyên định dạng khi chuyển đổi, nghĩa là 999.0000 (float) -> 999.0000 (String). Vấn đề của tôi là khi các giá trị chứa số zeroes tùy ý sau dấu thập phân, như trong ví dụ trước, chúng bị tước đi khi chuyển đổi thành chuỗi, do đó kết quả tôi thực sự kết thúc là 999.Float để specifier định dạng String

Tôi đã xem ở định dạng số toString() trên MSDN, thông số RoundTrip ('R') trông giống như nó sẽ tạo ra những gì tôi muốn, nhưng nó chỉ được hỗ trợ cho các biến đơn, đôi và BigInt. Có một định dạng specifier như thế này cho các biến float ?? Hoặc sẽ dễ dàng hơn khi chỉ chuyển đổi các giá trị thành tăng gấp đôi?

CẬP NHẬT: Chỉ cần cho rõ ràng, lý do tôi muốn giữ các số 0 là vì tôi đang so sánh các chữ số thập phân, tức là tôi so sánh số chữ số sau dấu thập phân giữa hai giá trị. Ví dụ: 1.00 và 1.00000 có số chữ số khác nhau sau dấu thập phân. Tôi biết đó là một yêu cầu kỳ lạ, nó dành cho công việc và yêu cầu đến từ trên cao.

CẬP NHẬT 2-3-11:

Tôi đã suy nghĩ về điều này quá khó, tôi đang đọc những con số từ một tập tin txt và sau đó phân tích chúng như phao, tôi sẽ sửa đổi chương trình để kiểm tra cho dù giá trị chuỗi là số thập phân hay số nguyên. Xin lỗi vì đã lãng phí thời gian của bạn, mặc dù điều này rất sâu sắc.

+0

có bao nhiêu chữ số sau dấu thập phân?nếu bạn muốn giữ cho rằng động, giả sử giá trị là chính xác float, sau đó sử dụng. ToString ("G") –

+0

Các chữ số sẽ thay đổi, để giữ cho nó đơn giản, tôi muốn nói phạm vi chữ số sau dấu thập phân có thể là bất cứ nơi nào giữa 1 và 5. – kingrichard2005

+0

. ToString ("G") là tốt nhất cho phạm vi biến –

Trả lời

24

Thứ nhất, là Etienne says, float trong C# Single. Nó chỉ là từ khóa C# cho kiểu dữ liệu đó.

Vì vậy, bạn chắc chắn có thể làm điều này:

float f = 13.5f; 
string s = f.ToString("R"); 

Thứ hai, bạn đã gọi một vài lần để "định dạng" của số; số không có định dạng, chúng chỉ có các giá trị . Chuỗi có định dạng. Điều này khiến tôi băn khoăn: điều này bạn có cái gì có định dạng nhưng không phải là một chuỗi? Điều gần nhất tôi có thể nghĩ là decimal, trong đó không duy trì độ chính xác của chính nó; tuy nhiên, chỉ cần gọi decimal.ToString sẽ có tác dụng bạn muốn trong trường hợp đó.

Làm thế nào về việc bao gồm một số mã ví dụ để chúng tôi có thể thấy chính xác những gì bạn đang làm và tại sao nó không đạt được những gì bạn muốn?

+2

Lưu ý nhanh: trong các lĩnh vực khoa học, phổ biến để phân biệt "1.01e5" và "1.0100e5", vì số lượng dấu 0 đóng góp vào số chữ số có nghĩa, biểu thị độ chính xác của phép đo. –

4

Trong C#, float là bí danh cho System.Single (giống như int là bí danh cho System.Int32).

+6

Haha, "giống một chút" —nice one;) –

38

Sử dụng ToString() với định dạng này:

12345.678901.ToString("0.0000"); // outputs 12345.6789 
12345.0.ToString("0.0000"); // outputs 12345.0000 

Đặt càng nhiều không cần thiết ở phần cuối của định dạng.

+0

Hi Aliostad, vấn đề với điều này, tôi muốn chuỗi được định dạng chính xác như một số được định dạng. Đối với ví dụ thứ hai của bạn, tôi muốn nó là "12345.0" như một chuỗi, không phải là "12345.0000". – kingrichard2005

+0

@ kingrichard2005- thông tin nào cho bạn biết liệu phao là 12345.0 hay 12345.0000? Chúng sẽ tương đương với phao. –

+0

Tôi đang đọc các tệp này từ tệp txt. Có lẽ một lựa chọn tốt hơn sẽ là để xác định nếu số đọc trong một chuỗi là một số thập phân hay không. – kingrichard2005

13

Bạn có thể vượt qua một chuỗi định dạng cho phương thức ToString, như vậy:

ToString("N4"); // 4 decimal points Number 

Nếu bạn muốn xem chi tiết bổ, hãy nhìn vào MSDN - Standard Numeric Format Strings

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