2012-08-24 126 views
2

如果值大於或等於0.01且小於等於1000,則需要以浮點格式顯示值以及以指數格式顯示
顯示在在浮動格式在C#中以指數格式表示雙精度值

對於如expotential格式別人顯示:3.230000000顯示爲3.23 0.00001顯示爲1E-05

但是我的代碼的問題,如果數給出是1,那麼該號碼顯示爲1.00 。

if (dValue >= 0.01|| dValue <= 1000.0) 
     return (string.Format("{0:0.##E+00}", dValue)); 
    else 
     return (string.Format("{0:F2}", dValue)); 

請讓我知道如何檢查數量不包含十進制值

+3

我想知道你的邏輯..> = 0.01或<= 1000.0應該始終爲真。你的意思是「和」嗎? –

+0

@ raghav55:請更正您的邏輯,因爲它不符合書面文字。 –

回答

1

回合數到小數點後兩位,併爲整數,看結果是否「足夠接近」:

if (dValue >= 0.01 && dValue <= 1000.0) 
{ 
    if (Math.Abs(Math.Round(dValue, 2) - Math.Round(dValue, 0)) < 0.005) { 
     return string.Format("{0:F0}", dValue); 
    else 
     return string.Format("{0:F2}", dValue); 
} 
else return (string.Format("{0:0.##E+00}", dValue)); 

的事情,這裏要注意的是,(總是與浮點數)的兩個舍入結果之間的比較應該是而不是是一個等式比較。

+0

代碼引發運行時錯誤。 Formatspecifier無效 – Raghav55

+0

如果我給一個數字如1 – Raghav55

+0

@ Raghav55:抱歉,修正。 – Jon

0

請考慮簡單的使用G format

或使用Math.Truncate獲取整數部分,即看它是否與原始數字相同(需要考慮輸出格式精度與desider eps進行比較,在您的情況下可能爲0.005)。

1

更換你的最後一行

return (string.Format("{0:F2}", dValue)) 

return (string.Format("{0:0.##}", dValue)) 
0

太多時間。 :)

您將獲得最多2位數值,如3.234。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(Format(0.00001)); 
     Console.WriteLine(Format(1)); 
     Console.WriteLine(Format(3.2)); 
     Console.WriteLine(Format(3.22)); 
     Console.WriteLine(Format(3.256)); 
     Console.ReadLine(); 
    } 

    static string Format(double dValue) 
    { 
     if (dValue >= 0.01 && dValue <= 1000.0) 
     { 
      int temp = (int)Math.Round(dValue * 100); 
      if (temp % 100 == 0) 
       return ((int)dValue).ToString(); 
      else if (temp % 10 == 0) 
       return (string.Format("{0:F1}", dValue)); 
      else 
       return (string.Format("{0:F2}", dValue)); 
     } 
     else 
      return (string.Format("{0:0.##E+00}", dValue)); 
    } 
} 

1E-05 
1 
3,2 
3,22 
3,26 

大概有清潔的解決方案?