0

我有一个小数字段

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

现在在 If 语句中,我想将其与零进行比较,实际上我想检查Deducted Tax是否为零或 null

        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 之类的 nullif (payRoll.DeductedTax <= 0)和零进行比较if (payRoll.DeductedTax <= 0)?我应该怎么做才能完成我想要的操作?

4

5 回答 5

2

宣布 :

public decimal? DeductedTax { get; set; }

利用:

if (payRoll.DeductedTax.HasValue && payRoll.DeductedTax.Value <= 0)
于 2013-06-25T10:27:31.863 回答
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
于 2013-06-25T10:25:38.850 回答
1

您可以decimal?用作可空类型

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

对于可空类型,值类型有其价值,也有附加 null价值。因此,在此声明之后,您可以检查它们是否存在null

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

于 2013-06-25T10:27:20.073 回答
1

decimal DeductedTax必须声明为Nullable 类型

public decimal ? DeductedTax { get; set; }

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

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

于 2013-06-25T10:25:22.787 回答
0

奇怪的是,这件事在清洁然后构建溶液后起作用了,我不知道为什么,但它确实发生了

if (payRoll.DeductedTax == 0)
于 2013-06-25T11:12:42.197 回答