关于十进制铸造和精度的问题

时间:2010-11-10 21:53:58

标签: c# casting decimal precision


我正在尝试解决这里的数据谜,但我不确定这是我的代码问题还是互联网浏览器问题...它在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";

在所有浏览器中,是否在所有字符串的末尾分配了所有字符串?感谢。

2 个答案:

答案 0 :(得分:2)

您正在运行C#,应该在服务器端执行。它应该与浏览器无关。

此外,只有第一个条件成立。第一个值大于.8,第二个值显然不大,我相信比较中的可空类型总是返回false。

答案 1 :(得分:1)

注意:您可以使用(Decimal).8代替.8m。它更短,更清洁。

在这种情况下比较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表示缺少值,这与 none (或)非常不同,后者是特定值。没有东西的比较没有真正的定义,它不是更大,也不是更小,所以两者都解决了错误。是不存在的人比我高吗?不,他不存在。一个不存在的人比我短吗?不,他不存在。

编辑

另外,你会发现你的第二个条件(正如其他人指出的那样)总是错误的。

<强> /修改

这就是你所看到的,而不是浏览器问题,希望有所帮助!