2014-03-25 62 views
1

我有以下腳本示出了格式如下作爲輸出:如何定義格式輸出

67534 : 0.645623 
64653 : 0.854261 
95688112 : 0.7566438 

當我測試在另一個系統上我的腳本,所述第二列(浮點數)的格式改變爲例如:12.3E^12。當我從控制面板更改數字格式時,格式變得可以。在我的代碼中修復數字格式的解決方案是什麼,而不是更改系統的數字格式(僅適用於第二列(resultwithindex.result))?

foreach (var resultwithindex in results.Select((r, index) => new { result = r, Index = index }).OrderByDescending(r => r.result).Take(n)) 
{ 
    sb1.AppendFormat("{0}: {1}", c[resultwithindex.Index], resultwithindex.result); 
    sb1.AppendLine(); 
} 
MessageBox.Show(sb1.ToString()); 

在此先感謝

回答

1

爲避免字符串格式取決於您所在機器的文化設置,您需要將文化指定爲格式提供者。例如:

sb1.AppendFormat(CultureInfo.InvariantCulture, "{0}: {1}", 
       c[resultwithindex.Index], resultwithindex.result); 
+0

謝謝@StriplingWarrior。如果我這樣做,它總是顯示結果與我的系統一樣? – user3446681

+0

@ user3446681:是的,InvariantCulture是爲了在不同的系統中保持一致。 – StriplingWarrior

+0

感謝@StriplingWarrior。還可以告訴我你的方法和戴之間有什麼區別(以上評論) – user3446681

2

的關鍵是使用「F6」格式字符串爲您的十進制值。

您可以做ToString呼叫發信成AppendFormat(像這樣:)

sb1.Appendformat "{0}: {1}", c[resultwithindex.Index], resultwithindex.result.ToString("F6", CultureInfo.InvariantCulture)); 

...或採取複合格式字符串的優勢,做它像這樣前:

sb1.Appendformat(CultureInfo.InvariantCulture, "{0}: {1:F6}", c[resultwithindex.Index], resultwithindex.result); 
+0

這會將數字舍入到小數點後6位。這聽起來不像他想要的那樣,因爲他提供的樣本中有一個7位數的數字。 – StriplingWarrior

+0

謝謝@戴。如果我這樣做,它總是顯示結果與我的系統一樣? – user3446681

+0

@StriplingWarrior這是一個練習,讓讀者修改它以使用所需的小數位數:) – Dai