2011-01-14 160 views
0

我是編程新手,正在嘗試編寫一個程序,計算出一個百分比,然後根據結果顯示格式化的答案。Mod返回奇怪的值

if(percent % 1 == 0.0) 
{ 
    sw.Write(" {0}%", (int)percent); 
} 
else 
{ 
sw.Write((" {0:f1}%", percent); 

在這種情況下的百分比值是11,14,12,6和4在所有但14它顯示爲整數,但用14它顯示爲14.0。如果我觀察百分比數字會出現11.0 12.0等,但與14它是14.000000000000004,因此顯示不正確。這是一些怪癖還是我只是沒有正確編程?至於巴里

+0

這隻有當百分比是某些數字時纔會發生 - 7,14或28但不是21.所有其他數字都是正確的。現在我真的很困惑!問候巴里 – user575357 2011-01-14 10:24:48

+0

什麼類型是百分之?你如何獲得價值? – Yogesh 2011-01-14 10:41:39

+0

您的示例在這裏不會產生描述的問題,如果百分比的類型是int或double。什麼類型是百分比?你能修改你的例子來真正地展示問題嗎? – 2011-01-14 10:48:10

回答

1

使用operator ==你不應該比較浮點值。

我張貼一些代碼here,顯示它應該怎麼做。

編輯

完整的例子:

class Program 
{ 
    static double epsilon = 0.000001; 

    static bool DoubleEquals(double value1, double value2) 
    { 
     return Math.Abs(value1 - value2) < epsilon; 
    } 

    static void Print(double percent, TextWriter sw) 
    { 
     if (DoubleEquals(percent % 1, .0)) 
     { 
      sw.Write(" {0}%", (int)percent); 
     } 
     else 
     { 
      sw.Write(" {0:f1}%", percent); 
     } 
    } 

    public static void Main(string[] args) 
    { 
     Print(11.0, Console.Out); 
     Print(14.000000000000004, Console.Out); 
     Print(12.0, Console.Out); 
     Print(6.0, Console.Out); 
     Print(4.0, Console.Out); 

     Console.Write("Press any key to continue . . . "); 
     Console.ReadKey(true); 
    } 
當然

,你必須調整epsilon到一個足夠小的值。