if语句中将Decimal与零进行比较?

时间:2013-06-25 10:22:29

标签: c# decimal

我有一个十进制字段

[Display(Name = "DeductedTax")]
[Required(ErrorMessage = "*")]
public decimal DeductedTax { get; set; }

现在在If语句中我想将它与零进行比较,实际上我想检查Deducted Tax是零还是空或不是

        if (payRoll.DeductedTax <= 0)
        {
            if (payRoll.PayRollEmployee.EmployeeSalary.PayGrade == "A+")
            {
                payRoll.DeductedTax = payRoll.EmployeeSalary * 15 / 100;
                payRoll.EmployeeSalary -= payRoll.DeductedTax;
            }
            else if (payRoll.PayRollEmployee.EmployeeSalary.PayGrade == "A")
            {
                payRoll.DeductedTax = payRoll.EmployeeSalary * 10 / 100;
                payRoll.EmployeeSalary -= payRoll.DeductedTax;
            }
            else if (payRoll.PayRollEmployee.EmployeeSalary.PayGrade == "B")
            {
                payRoll.DeductedTax = payRoll.EmployeeSalary * 5 / 100;
                payRoll.EmployeeSalary -= payRoll.DeductedTax;
            }
        }

为什么我无法将其与null({1}}和零if (payRoll.DeductedTax <= 0)进行比较?我该怎么做才能完成我想要的操作?

5 个答案:

答案 0 :(得分:2)

声明:

public decimal? DeductedTax { get; set; }

使用:

if (payRoll.DeductedTax.HasValue && payRoll.DeductedTax.Value <= 0)

答案 1 :(得分:1)

您的decimal DeductedTax必须声明为Nullable type

public decimal ? DeductedTax { get; set; }

在这种情况下,它可以包含十进制可以包含的所有可能数字+它可以具有Null值。

如果这不是您所要求的,请澄清。

答案 2 :(得分:1)

decimal是一种不可为空的类型,因此,即使您可以将其与null进行比较,也没有意义。如果尚未设置该属性,则它将获得小数的默认值,即0(从技术上讲,它是0.0M)。

因此,检查0是否有效地检查了您的要求。

如果您要求它允许空值,那么您可以使用以下方法之一使其可以为空:

public Nullable<decimal> DeductedTax { get; set; }
public decimal? DeductedTax { get; set; }//this is just shorthand for the first

答案 3 :(得分:1)

您可以将decimal?用作 nullable type

[Display(Name = "DeductedTax")]
[Required(ErrorMessage = "*")]
public decimal? DeductedTax { get; set; }

对于可空类型,值类型具有其值,并且还具有附加 null值。因此,在此声明之后,您可以检查它们是否为null

只是提示decimal?等同于Nullable<decimal>

答案 4 :(得分:0)

奇怪的是,这个东西在清洁然后构建解决方案后工作,我不知道为什么,但它确实发生了

if (payRoll.DeductedTax == 0)