【问题标题】:Why the operator NOT increase my net salary?为什么运营商不增加我的净工资?
【发布时间】:2020-08-21 05:59:53
【问题描述】:

我正在尝试计算工资,但在确定税收时遇到了问题。

前 60,000 美元的总工资不征税。工资总额在6万到10万美元之间的部分,缴纳20%的税,工资总额超过10万美元的部分,缴纳25%的税。编写一个程序,计算输入的总工资(税前工资)的净工资(税前工资)。

首先,如果我设置了两个条件。工资低于第一个限制,不得等于零或小于零。在这种情况下,净工资应该等于总工资。但是,当 NOT 运算符存在时,净工资总是高于总工资。

当我删除 NOT 运算符时,一切都很好。问题是为什么 NOT 运算符会增加我的净工资值?

这里是代码

const double s0 = 0;// s0, s1 and s2 are tax percentages
        const double s1 = 0.2;
        const double s2 = 0.25;

        const double border1= 60000;
        const double border2 = 100000;
       
        double neto_salary;

        Console.WriteLine(" Enter your bruto sallary ");

        double bruto_salary = double.Parse(Console.ReadLine());
        if ( (bruto_salary<border1) && (bruto_salary !<=0) )   //NOT operator on this line
        {
            neto_salary = bruto_salary * (1 - s0);
            Console.WriteLine(" Your salary is {0} $ ", neto_salary);
        
        
        }
        else if ((bruto_salary>border1) && (bruto_salary<border2) )
        {
              neto_salary = border1 + (bruto_salary - border1) * (1 - s1);
            Console.WriteLine(" Your salary is {0} $ ", neto_salary);
        }

        else
        {

            neto_salary = border1 + (border2 - border1) * (1 - s1) + (bruto_salary - border2) * (1 - s2);
            Console.WriteLine(" Your salary is {0} $ ", neto_salary);
        }

【问题讨论】:

  • 我在您的代码中没有看到任何NOT,所以我应该如何开始猜测您的问题出在哪里?
  • 这将是一些条件逻辑,我看到的唯一一个 NOT 运算符!&lt;=0 看起来有点滑稽,你可以用&gt;0 更容易地说明这一点
  • 也许你想要&gt;
  • !&lt;=0 可能与 &gt; 相同(同时可空性不是问题,并且不在该代码中)。
  • 所以它必须是 > 0 - 它们是说同一件事的不同方式(假设 bruto_salary 不是 null,并且在您的特定代码中它不能是 null)。

标签: c#


【解决方案1】:

我不这么认为:

bruto_salary !<= 0   // salary not less than or equal to zero.

是有效的 C# 语法,这样做的方法是:

! (bruto_salary <= 0)   // not (salary less than or equal to zero).

但是,因为这相当于:

bruto_salary > 0   // salary greater than zero.

我会选择那个。


顺便说一句,我怀疑表达式bruto_salary !&lt;=0 实际上被视为bruto_salary! &lt;= 0,其中! 是在C# 8 中引入的后缀null-forgiving 运算符。

运行时上下文(a)中,x! 的计算结果为x,因此您的陈述实际上与您想要的含义完全相反:

bruto_salary <= 0

(a) 可空性检查是编译时的事情,它对您的代码执行静态分析以发现某些问题。详情请参阅here

【讨论】:

  • 等等,这个运算符真的存在于其他编程语言中吗?这有什么意义?
  • @41686d6564 不是为了让事情变得“更容易”和更自然的语言,但绝不应该使用,因为即使在自然语言中,双重否定也会混淆含义。
  • @41686d6564:如果你的意思是!&lt;=,不,我从未见过。
  • 哇,我从来不知道后缀! 运算符...我想一旦它成为“主流”,它会给stackoverflow带来许多新问题:)
猜你喜欢
  • 2022-04-02
  • 2011-07-09
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多