2011-08-10 48 views
5

我試圖格式化科學格式的一些大數字,但我需要三倍的倍數的權力。有沒有推薦的方法來做到這一點?格式C#Double to Scientfic三的倍數的權力

我有一個表中的數字範圍,而不是真正的科學格式(小數點前一個數字)我很高興有這種變化,以獲得三倍的權力,爲例如:

3.123e + 003
19.523e + 003

不是:

3.123e + 003
1.952e + 004

我相信,將所有權力設置爲三的倍數使我的表格更易於掃描。

在此先感謝

+1

這通常被稱爲「工程符號」,也在這個問題中討論:http://stackoverflow.com/questions/808104/engineering-notation-in-c。 –

+0

謝謝B皮特。曾看過那篇文章,但由於我不是一名工程師,我開始對這些單位感到困惑,同事剛剛詢問了三個的倍數,不一定與表中的單位相關。有趣的帖子,但我可能會浮動它作爲一個選項:) – Marc

+0

無論您使用單位名稱(m,k,...)或不,我認爲在其他問題中討論的一些方法可能是有用的解決問題就像你說的那樣。 –

回答

4

我認爲你需要編寫自己的函數。 首先您可以獲得數字的科學表示,其精度比您需要的大兩位數。 然後,你應該解析結果字符串得到浮點係數和10的冪指數作爲十進制類型的數字。之後,您可以用3分析剩餘的分區索引,並以適當的方式更改數字。最後你生成輸出字符串。

static string Scientific3(double value, int precision) 
{ 
    string fstr1 = "{0:E" + (precision+2).ToString() + "}"; 
    string step1 = string.Format(fstr1, value); 
    int index1 = step1.ToLower().IndexOf('e'); 
    if (index1 < 0 || index1 == step1.Length - 1) 
     throw new Exception(); 
    decimal coeff = Convert.ToDecimal(step1.Substring(0, index1)); 
    int index = Convert.ToInt32(step1.Substring(index1 + 1)); 
    while(index%3!=0) 
    { 
     index--; 
     coeff *= 10; 
    } 
    string fstr2 = "{0:F" + precision.ToString() + "}E{1}{2:D3}"; 
    return string.Format(fstr2, coeff, ((index < 0) ? "-" : "+"), Math.Abs(index)); 
} 
+0

啊,很酷!沒有想過分析已經解析過的字符串並從那裏操縱它。將這個寫入一個轉換器,並給它一個去,謝謝你的想法和代碼:D – Marc