2010-11-10 107 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