Dizeyi C # içinde Float'a Dönüştürme


108

"41.00027357629127" gibi bir dizeyi dönüştürüyorum ve kullanıyorum;

Convert.ToSingle("41.00027357629127");

veya

float.Parse("41.00027357629127");

Bu yöntemler 4.10002732E + 15 döndürür .

Float türüne dönüştürdüğümde "41.00027357629127" istiyorum. Bu dize aynı olmalı ...


1
O nasıl numarayı gösterdiğinizi edilir - Bunlar dönüştürülür ne biliyor musunuz
mmmmmm

1
Neden ToSingle olduğu hakkında bir fikriniz var mı? Ve ToFloat değil mi?
Lord Darth Vader

41.00027357629127 bilimsel gösterimde 4.10002732E + 15 olmayacaktır, tabii ki kültürünüz ondalık nokta yerine ondalık virgül kullanmaz (ve binlik ayırıcı olarak nokta), bu nedenle sayı gerçekte şöyle olacaktır: 4100027357629127 sonuç olarak 4.10002732E + 15
ljgww olarak görüntülenir

Yanıtlar:


230

İş parçacığınızın yerel ayarı, ondalık işareti "." Yerine "," olacak şekilde ayarlanmıştır.

Bunu kullanmayı deneyin:

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

Bununla birlikte, bir şamandıranın bu kadar çok basamaklı hassasiyet tutamayacağını unutmayın. Bunu yapmak için double veya Decimal kullanmanız gerekir.


35
using System.Globalization;erişim için ad alanını eklemeyi unutmayınCultureInfo
Mobiletainment

24

Birincisi, bu sadece bir olan sunum ait floatayıklayıcısında bkz numara. Gerçek değeri yaklaşık kesin (kadar bu mümkün gibi) olduğunu.

Not: Dizelere karşı kayan nokta sayılarıyla uğraşırken her zaman CultureInfo bilgilerini kullanın .

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

Bu sadece bir örnek; davanız için uygun bir kültür seçin.


CultureInfo'mı nasıl seçebilirim? TR-TR'yi nereye ekleyeceğim türkiyedeyim?
Mehmet

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

20

Aşağıdakileri kullanabilirsiniz:

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

4
Lütfen bunun neden doğru cevap olduğu konusunda biraz bilgi verin.
Bas Peeters


4

Float'ın hassasiyeti 7 basamaklıdır. Partinin tamamını elinizde tutmak istiyorsanız , 15-16 basamak tutan çift tipi kullanmanız gerekir . Biçimlendirmeyle ilgili olarak, biçimlendirme çiftleriyle ilgili bir gönderiye bakın . Ve C # 'daki ondalık ayırıcılar hakkında endişelenmeniz gerekir .


çift ​​yoruldum.Parse 4100027357629127.0 döndürür çok kötü
Mehmet

2
Bu "." karakter yerel ayarınızdaki ondalık ayırıcı değil mi? Stackoverflow.com/questions/3870154/c-sharp-decimal-separator'a
jpe

0

Yapabilirsin double.Parse("41.00027357629127");


Nasıl yuvarlanacağını sorduğunu sanmıyorum.
VEYA Mapper

-2

Daha fazla kesinlik değeri elde etmek için float yerine double ile ayrıştırmayı kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.