2011-02-01 17 views
16

Bazı dize değerlerine sahibim Bir dizeye dönüştürmek istiyorum, dönüştürürken formatlamayı aynı tutmak istiyorum, yani 999.0000 (float) -> 999.0000 (String). Benim problemim, ondalık noktadan sonraki değerlerin rasgele bir sayı içermesidir, önceki örnekte olduğu gibi, bir dizeye dönüştürüldüğünde bunlar sıyrılırlar, sonuçta ben aslında sonuç olarak 999 olur.Float to Dize biçim belirteci

Baktım MSDN'daki toString() yönteminin biçimindeki tanımlayıcılarda, RoundTrip ('R') belirteci istediğimi üretecek gibi görünüyor, ancak yalnızca Tek, Çift ve BigInt değişkenleri için destekleniyor. Float değişkenleri için böyle bir format belirleyici var mı? Ya da değerleri sadece çiftlere dönüştürmek daha mı kolay olurdu?

GÜNCELLEME: Sadece netlik sağlamak için, takip eden sıfırları tutmak istememin nedeni, ondalık basamakların karşılaştırmasını yapıyorum, yani, iki değer arasındaki ondalık basamaktan sonraki basamak sayısını karşılaştırıyorum. Yani, örneğin, 1.00 ve 1.00000, ondalık noktadan sonra farklı bir sayıya sahiptir. Bunun garip bir istek olduğunu biliyorum, iş için ve gereksinim yüksek seviyeden geliyor.

GÜNCELLEME 2-3-11:

Ben baskını gibi onları ayrıştırma sonra Metin dosyasından sayıları okuma ve ediyorum, çok zor bu düşünüyordum, ben kontrol etmek programı değiştirmek için gidiyorum dize değerlerinin ondalık veya tam sayı olup olmadığı. Bu çok anlayışlı olmasına rağmen, zamanınızı boşa harcadığım için üzgünüm. C#

+0

kaç basamak ondalık noktadan sonra bakmak isterseniz?Eğer bu dinamiği korumak istiyorsanız, değerin doğru kayan olduğunu varsayarak .ToString ("G") –

+0

kullanın. Rakamlar değişecektir, basit olması için ondalık noktadan sonraki basamak aralığının herhangi bir yerde olabileceğini söyleyebilirim 1 ile 5 arası – kingrichard2005

+0

.ToString ("G") –

cevap

24

İlk olarak, C# Etienne says, float olarak Single olup. Bu veri türü için sadece C# anahtar sözcüğü.

Yani kesinlikle bunu yapabilirsiniz:

float f = 13.5f; 
string s = f.ToString("R"); 

İkincisi, Buradaki sayı "formatı" na birkaç kez atıfta bulunmuşlardır; sayıların biçimi yoktur, yalnızca değerleri'dır. Dizeler biçimlerinin var. Bu beni meraklandırıyor: sahip olduğunuz şeyin bir biçimi var ama bir ip değil mi? Düşünebildiğim en yakın şey, 'un kendi hassasiyetini koruduğu decimal olacaktır; Ancak, sadece decimal.ToString numaralı telefonu aramak istediğiniz etkiyi göstermelidir.

Bazı örnek kodları eklemeyle ilgili olarak, tam olarak ne yaptığınızı ve neyi istediğinizi gerçekleştiremediğimizi görebilmemiz için ne dersiniz?

+2

Hızlı not: Bilimsel alanlarda, "1.01e5" ve "1.0100e5" değerlerini ayırt etmek yaygındır, çünkü sondaki sıfır sayısı, bir ölçümün kesinliğini ifade eden anlamlı basamak sayısına katkıda bulunur. –

4

, floatSystem.Single için bir takma ad (int gibi biraz System.Int32 için bir takma ad). Bu biçimi ile

+6

Haha, "biraz gibi" —nice bir;) –

38

Kullanım ToString():

12345.678901.ToString("0.0000"); // outputs 12345.6789 
12345.0.ToString("0.0000"); // outputs 12345.0000 

formatında sonunda kadar sıfır gerektiği koyun.

+0

Merhaba Aliostad, bununla ilgili sorun, bir dizinin formatlandığı gibi biçimlendirilmesini istiyorum. İkinci örneğiniz için, "12345.0000" değil, "12345.0" dizgesi olmasını istiyorum. – kingrichard2005

+0

@ kingrichard2005- hangi bilgiler float 12345.0 veya 12345.0000 olduğunu söyler? Float olarak eşdeğer olurdu. –

+0

Bu dosyaları bir txt dosyasından okuyorum. Belki de daha iyi bir seçenek, dize olarak okunan sayının ondalık sayı olup olmadığını belirlemektir. – kingrichard2005