2011-06-08 11 views
6

Verileri bir işlemden csv'ye veriyorum. Ara sonuçları bir veri sınıfında saklıyorum, bu da veriyi bir dosyaya yazılabilmesi için bir dizgeye çıkarmanın yöntemlerini de içerir.string.Format NumberFormatInfo öğesini yoksayar?

// headers 
swResultFile.WriteLine("Group\t" + GroupResult.Headers); 

// values 
foreach (var r in GroupResults) swResultFile.WriteLine(r.Key + "\t" + r.Value.ValuesString); 

Ama çıkış dosyası hala tüm ondalık sayılar vardır: İşte

Class DataClass { 

    // the actual data 
    public double Value1 { get; set; } 
    public double Value2 { get; set; } 
    public double Value3 { get; set; } 

    // return headers for this dataclass (called once) 
    public static string Headers { get { return "Value1\tValue2\tValue3"; } } 

    // no decimals needed (keep filesize smaller, numbers are millions and up) 
    static NumberFormatInfo nfi = new NumberFormatInfo() { NumberDecimalDigits = 0 }; 

    // this returns a string with the values for the dataclass (called for each row) 
    public string ValuesString { 
     get { 
      // ** I would expect the numbers to have NO decimals because of nfi ** 
      return string.Format(nfi, "{0}\t{1}\t{2}", 
       Value1, 
       Value2, 
       Value3, 
      ); 
     } 
    } 
} 

i dosyaya yazma o NumberFormatInfo görmezden neden

Group Value1 Value2 Value3 
1 176983.222718191 278477.364780645 462811.208871335 
2 11262339.27 16383.9680721473 118430.334721429 

bilen var mı?

Hata ayıklayıcısında işaretlediğimde, iyi görünüyor.

sayesinde

Gert-Jan

+0

Dosya yazmak için kullandığınız kodu yayınlayabilir misiniz, herhangi bir şans 'ValuesString 'özelliğini kullanmayan? – Lazarus

+0

tamam kodu ekledim – gjvdkamp

cevap

11

Sen NumberFormatInfo kullanmak Format için N Biçim belirteci kullanmak zorunda. Bu deneyin

return string.Format(nfi, "{0:N}\t{1:N}\t{2:N}", 
      Value1, 
      Value2, 
      Value3, 
     ); 
+1

Teşekkürler! Bu hile yaptı. – gjvdkamp

+0

Ve sonra 1000 gruplandırmasına izin vermeyin. –

+0

bunu yaptı: NumberGroupSeparator = "" veya daha hızlı bir şey mi var? Gerçek kodda daha fazla alan var. Bu yaklaşımı daha hızlı hale getirmek için Value1.ToString ("0") + "\ t" + Value2.ToString ("0") vb. – gjvdkamp

İlgili konular