2010-11-10 108 views
0


我想解決這裏的數據謎題,但我不知道這是我的代碼問題還是因特網瀏覽器問題......它在IE6和IE8中正常工作,但不知何故,當它被用來誰可能沒有使用IE客戶數據中出現錯誤...
十進制鑄造和精度問題

decimal? a = 1.0000m; 
decimal? b = 0.6999m; 
decimal? c = null; 
string aDesc = ""; 
string bDesc = ""; 
string cDesc = ""; 
if (a >= (Decimal).8) 
    aDesc = "condition A achieved"; 
if (b >= (Decimal).8) 
    bDesc = "condition B achieved"; 
if (c >= (Decimal).8) 
    cDesc = "condition C achieved"; 

是否所有琴絃在這所有的瀏覽器端分配的?謝謝。

+0

'.8M'更加簡潔。 – 2010-11-10 22:00:48

+0

@Kirk Woll - 我同意,但我認爲他可能會試圖問一下鑄造值和使用m後綴之間的區別。 – McKay 2010-11-10 22:05:10

+0

不知何故,它的工作原理並未將M拖在後面(十進制).8 – cjy 2010-11-12 13:32:18

回答

1

注意:您可以使用.8m而不是(Decimal).8。它更短,更乾淨。

在這種情況下比較null(如在Nullable中)會導致在每種情況下都是false。試試這個新項目:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     decimal? a = null; 
     if (a < .8m) 
     { 
      MessageBox.Show("Less Than"); 
     } 
     else if (a >= .8m) 
     { 
      MessageBox.Show("Greater Than or equal to"); 
     } 
     else 
     { 
      MessageBox.Show("Neither"); 
     } 
    } 
} 

如果你考慮一下,這是有道理的。 null缺乏值,這是從(或),其是特定的值非常不同。比較缺少某些東西並沒有真正的定義,它不是更大,也不是更小,因此都解決錯誤。是不是一個比我高的人?不,他不存在。一個不存在的人比我短嗎?不,他不存在。

編輯

而且,你會發現,你的第二個條件(如由其他人指出)始終是平的虛假。

/EDIT

這就是你所看到的,而不是瀏覽器的問題,希望幫助!

+0

+1 upvote for .8m – 2013-08-05 06:59:42

2

您正在運行C#,它應該在服務器端執行。它應該是瀏覽器無關的。

此外,只有第一個條件爲真。第一個值大於.8,第二個值顯然不會更大,並且我相信比較中可以爲空的類型將始終返回false。

+0

+1 @jying正在尋找錯誤位置的解決方案。 – 2010-11-10 22:00:03

+0

「c#=瀏覽器獨立」感謝您的確認!我知道一些javascripts是依賴於瀏覽器,但我不知道c#/ vb ... – cjy 2010-11-12 13:34:38