[C#] 避免數值轉換字串顯示科學記號
資料型態是 float, double, decimal 遇到數值是小數點後很多0,或只有整數位卻在數值後面含有很多0,這兩種情況下使用 ToString() 方法轉換後就會使用科學記號顯示這用兩個例子實作
例子1:double fNum = 0.000006;
string sValue = fNum .ToString();輸出:6E-06
例子2:double fNum = 1230000000000000000;
string sValue = fNum .ToString();輸出:1.23E+18
為避免出現科學記號,可以使用 ToString() 多載方法格式化顯式宣告轉換格式輸出字串double fNum = 0.00009;
string sValue = fNum.ToString();
Console.WriteLine(sValue); // 輸出:9E-05
sValue = fNum.ToString("N5");
Console.WriteLine(sValue); // 輸出:0.00009
sValue = string.Format("{0:F5}", fNum);
Console.WriteLine(sValue); // 輸出:0.00009使用上述方法的前提是要明確指定數值的位數
如果設定的位數太小,就會造成精度缺失double fNum = 0.00009;
string sValue = fNum.ToString();
Console.WriteLine(sValue); // 輸出:9E-05
sValue = fNum.ToString("N3");
Console.WriteLine(sValue); // 輸出:0.000
sValue = string.Format("{0:F3}", fNum);
Console.WriteLine(sValue); // 輸出:0.000若位數設定的太大,又會在小數位輸出太多0double fNum = 0.00009;
string sValue = fNum.ToString();
Console.WriteLine(sValue); // 輸出:9E-05
sValue = fNum.ToString("N10");
Console.WriteLine(sValue); // 輸出:0.0000900000
sValue = string.Format("{0:F10}", fNum);
Console.WriteLine(sValue); // 輸出:0.0000900000要避開上面兩個問題,轉換關鍵字可以採用"#",就不會產生多餘的0
string sValue = fNum.ToString("0.#####"); // 輸出:0.00009
sValue = fNum.ToString("0.##########"); // 輸出:0.00009
fNum = 100.00009;
sValue = fNum.ToString("0.#####"); // 輸出:100.00009
sValue = fNum.ToString("0.##########"); // 輸出:100.00009
fNum = 210000000000000000;
sValue = fNum.ToString("0.#####"); // 輸出:210000000000000000
sValue = fNum.ToString("0.##########"); // 輸出:210000000000000000以上解決了會有多餘0的問題
但精度不夠的問題還是存在,要解決這個問題可以宣告一個超大數量"#"關鍵字
"#"關鍵字可以宣告的上限值是339個,直接宣告到最大就可以確保所有小數位都可以被轉換double fNum = 0.00009;
string sValue = fNum.ToString("0." + new string('#', 339)); // 輸出:0.00009方便使用也可以直接把"#"關鍵字直接定義成一個常數public const string PrecisionFormat = "0.###################################################################################################################################################################################################################################################################################################################################################";
double fNum = 0.00009;
string sValue = fNum.ToString(PrecisionFormat)); // 輸出:0.00009
頁:
[1]