2012-06-26 41 views
64

Tôi đang chuyển đổi chuỗi như "41.00027357629127" và tôi đang sử dụng;Chuyển đổi chuỗi thành nổi trong C#

Convert.ToSingle("41.00027357629127"); 

hoặc

float.Parse("41.00027357629127"); 

Những phương pháp này trở 4.10002732E + 15.

Khi tôi chuyển sang chế độ float, tôi muốn "41.00027357629127". Chuỗi này nên được như vậy ...

+1

Làm thế nào để bạn biết nó được chuyển đổi như thế nào - đó là cách bạn hiển thị số – Mark

+0

Bất kỳ ý tưởng nào tại sao lại là ToSingle? Và không phải ToFloat? – R2D2

Trả lời

142

Ngôn ngữ của chuỗi của bạn được đặt thành một trong đó dấu thập phân là "," thay vì ".".

Hãy thử sử dụng này:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat); 

Lưu ý, tuy nhiên, một phao không thể giữ mà nhiều chữ số chính xác. Bạn sẽ phải sử dụng double hoặc Decimal để làm như vậy.

+16

đừng quên thêm không gian tên 'using System.Globalization;' để truy cập 'CultureInfo' – Mobiletainment

1

Bạn có thể double.Parse("41.00027357629127");

+0

Tôi không nghĩ anh ta hỏi làm thế nào để làm tròn nó. –

+0

Tôi mệt mỏi nhưng tôi đã không – Mehmet

4

Độ chính xác của float là 7 chữ số. Nếu bạn muốn giữ nguyên toàn bộ, bạn cần sử dụng loại double giữ 15-16 chữ số. Về định dạng, hãy xem bài đăng về formatting doubles. Và bạn cần phải lo lắng about decimal separators in C#.

+0

tôi mệt mỏi đôi.Parse nó trả về 4100027357629127.0 nó là quá xấu – Mehmet

+1

Điều này nghe giống như '.' ký tự không phải là dấu tách thập phân trong ngôn ngữ của bạn? Kiểm tra http://stackoverflow.com/questions/3870154/c-sharp-decimal-separator – jpe

7

Sử dụng Convert.ToDouble("41.00027357629127");

Convert.ToDouble documentation

+1

Điều này không thay đổi kiểu dữ liệu từ phao sang gấp đôi? OP muốn trôi nổi. –

18

Thứ nhất, nó chỉ là một bài thuyết trình số float bạn nhìn thấy trong trình gỡ lỗi. Giá trị thực là chính xác (nhiều nhất có thể).

Lưu ý: Sử dụng luôn luônCultureInfo thông tin khi xử lý các số dấu phẩy động so với chuỗi.

float.Parse("41.00027357629127", 
     System.Globalization.CultureInfo.InvariantCulture); 

Đây chỉ là ví dụ; chọn một nền văn hóa thích hợp cho trường hợp của bạn.

+0

làm thế nào tôi có thể chọn CultureInfo của tôi? Tôi đang ở Thổ Nhĩ Kỳ, nơi tôi sẽ thêm TR-TR? – Mehmet

+1

@Mehmet 'Hệ thống mới.Globalization.CultureInfo (" tr-TR ")' – sshow

0

Bạn có thể sử dụng phân tích cú pháp với gấp đôi thay vì nổi để có được giá trị chính xác hơn.

7

Bạn có thể sử dụng "float asd = (float) Convert.ToDouble("41.00027357629127");.

+3

Vui lòng cung cấp một số ngữ cảnh là tại sao đây là câu trả lời đúng. –

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