- UID
- 390967
- 帖子
- 1660
- 主題
- 855
- 精華
- 0
- 積分
- 869
- 楓幣
- 12244
- 威望
- 409
- 存款
- 10100
- 贊助金額
- 1800
- 推廣
- 0
- GP
- 2803
- 閱讀權限
- 150
- 在線時間
- 197 小時
- 註冊時間
- 2023-5-18
- 最後登入
- 2024-12-22
|
資料型態是 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
複製代碼 若位數設定的太大,又會在小數位輸出太多0- double 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
複製代碼 |
|