Chuyển đổi chuỗi thành Float trong C #


108

Tôi đang chuyển đổi một chuỗi như "41.00027357629127" và tôi đang sử dụng;

Convert.ToSingle("41.00027357629127");

hoặc là

float.Parse("41.00027357629127");

Các phương thức này trả về 4.10002732E + 15 .

Khi tôi chuyển đổi thành float, tôi muốn "41.00027357629127". Chuỗi này phải giống ...


1
Làm thế nào để bạn biết những gì nó được chuyển thành - đó là làm thế nào bạn hiển thị số
mmmmmm

1
Bất kỳ ý tưởng tại sao ToSingle của nó? Và không ToFloat?
Chúa Darth Vader

41.00027357629127 sẽ không phải là 4.10002732E + 15 trong ký hiệu khoa học, tất nhiên trừ khi nền văn hóa của bạn sử dụng dấu phẩy thập phân thay vì dấu thập phân (và dấu chấm làm dấu phân cách hàng nghìn), vì vậy con số thực sự sẽ được đọc là: 4100027357629127 do đó được hiển thị dưới dạng 4.10002732E + 15
ljgww

Câu trả lời:


229

Ngôn ngữ 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 cái này:

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

Tuy nhiên, lưu ý rằng một phao không thể chứa 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.


35
đừng quên thêm không gian tên using System.Globalization;để truy cậpCultureInfo
Mobiletainment

24

Đầu tiên, nó chỉ là một bản trình bày về floatsố bạn thấy trong trình gỡ lỗi. Các thực giá trị xấp xỉ chính xác (càng nhiều càng tốt đó là có thể).

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

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

Đây chỉ là một 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.


làm cách nào để tôi có thể chọn CultureInfo của mình? Tôi đang ở gà tây, nơi ı sẽ thêm TR-TR?
Mehmet

1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow

20

Bạn có thể sử dụng như sau:

float asd = (float) Convert.ToDouble("41.00027357629127");

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


4

Độ chính xác của float là 7 chữ số. Nếu bạn muốn nuôi cả lô thì phải sử dụng loại kép giữ 15-16 số. Về định dạng, hãy xem một bài đăng về định dạng gấp đôi . Và bạn cần phải lo lắng về dấu phân cách thập phân trong C # .


Tôi mệt mỏi double.Parse nó trả 4100027357629127,0 nó là quá xấu
Mehmet

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

0

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


Tôi không nghĩ anh ấy đang hỏi làm thế nào để làm tròn nó.
HOẶC Mapper

-2

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.