Mengubah String Menjadi Float di C #


108

Saya mengubah string seperti "41.00027357629127", dan saya menggunakan;

Convert.ToSingle("41.00027357629127");

atau

float.Parse("41.00027357629127");

Metode ini mengembalikan 4.10002732E + 15 .

Ketika saya mengonversi ke float, saya menginginkan "41.00027357629127". String ini harus sama ...


1
Bagaimana Anda tahu untuk apa itu diubah - begitulah cara Anda menampilkan nomor
mmmmmm

1
Tahu mengapa itu ToSingle? Dan bukan ToFloat?
Lord Darth Vader

41.00027357629127 tidak boleh 4.10002732E + 15 dalam notasi ilmiah, kecuali tentu saja budaya Anda menggunakan koma desimal dan bukan titik desimal (dan titik sebagai pemisah ribuan), sehingga bilangan tersebut sebenarnya akan terbaca: 4100027357629127 akibatnya akan ditampilkan sebagai 4.10002732E + 15
ljgww

Jawaban:


229

Lokal utas Anda disetel ke tempat yang tanda desimalnya adalah "," bukan ".".

Coba gunakan ini:

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

Perhatikan, bagaimanapun, bahwa pelampung tidak dapat menahan banyak digit presisi. Anda harus menggunakan ganda atau Desimal untuk melakukannya.


35
jangan lupa untuk menambahkan namespace using System.Globalization;untuk mengaksesCultureInfo
Mobiletainment

24

Pertama, ini hanya presentasi dari floatangka yang Anda lihat di debugger. Nilai sebenarnya kira-kira tepat (sebanyak mungkin).

Catatan: Gunakan selalu informasi CultureInfo saat berhadapan dengan angka floating point versus string.

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

Ini hanya sebuah contoh; pilih budaya yang sesuai untuk kasus Anda.


bagaimana cara memilih CultureInfo saya? Saya di Turki di mana saya akan menambahkan TR-TR?
Mehmet

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

20

Anda dapat menggunakan berikut ini:

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

4
Harap berikan beberapa konteks mengapa ini adalah jawaban yang benar.
Bas Peeters


4

Ketepatan pelampung adalah 7 digit. Jika Anda ingin menyimpan keseluruhan lot, Anda perlu menggunakan tipe ganda yang menyimpan 15-16 digit. Mengenai pemformatan, lihat postingan tentang pemformatan ganda . Dan Anda perlu khawatir tentang pemisah desimal di C # .


Saya lelah ganda Parse itu mengembalikan 4100027357629127.0 itu terlalu buruk
Mehmet

2
Ini terdengar seperti '.' karakter bukan pemisah desimal di lokal Anda? Lihat stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe

0

Kamu bisa double.Parse("41.00027357629127");


Saya tidak berpikir dia bertanya bagaimana membulatkannya.
ATAU Mapper

-2

Anda dapat menggunakan parsing dengan double sebagai ganti float untuk mendapatkan nilai presisi yang lebih tinggi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.