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 ...

Mehmet
sumber
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.

Matthew Watson
sumber
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.

Tigran
sumber
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");
pengguna4292249
sumber
4
Harap berikan beberapa konteks mengapa ini adalah jawaban yang benar.
Bas Peeters
7

Menggunakan Convert.ToDouble("41.00027357629127");

Convert.ToDouble dokumentasi

Ozgur Dogus
sumber
2
Bukankah ini mengubah tipe data dari float menjadi double? OP ingin mengapung.
Nell Martinez
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 # .

jpe
sumber
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");

ABH
sumber
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.

Pelajar
sumber