C#带可为空十进制数的除法

C#带可为空十进制数的除法,c#,C#,我有以下代码: decimal? Price = 36; decimal? ExchangeRate = 4.4m; decimal result = Price ?? 0 / ((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1)); Console.WriteLine(result); //result = 36 decimal cleanExchangeRate = ((ExchangeRate

我有以下代码:

    decimal? Price = 36;
    decimal? ExchangeRate = 4.4m;
    decimal result = Price ?? 0 / ((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1));
    Console.WriteLine(result);
    //result = 36
    
    decimal cleanExchangeRate = ((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1));
    decimal cleanPrice = Price ?? 0;
    decimal result2 =  cleanPrice / cleanExchangeRate;
    Console.WriteLine(result2);
    //result2 = 8.18

第一次计算和第二次计算的区别是什么?如果我把它当作一行,它不知何故就不会平分价格。

你应该把
价格??0
放入括号中,如下所示:

 decimal result = (Price ?? 0) / (((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1)));

根据你的例子,它的意思是:
Price??(0/…)
,因为
Price
不是
null
结果总是等于
Price
,你应该把
Price??0
放入括号中,如下所示:

 decimal result = (Price ?? 0) / (((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1)));

根据你的例子,它的意思是:
Price??(0/…)
,因此,由于
Price
不是
null
结果总是等于
Price
具有非常低的值,因此一行代码被解析为:

Price ?? (0 / ((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1)));
如果
Price
为空,则求值为
(0/((汇率==0)?1:(汇率±1))
,否则求值为
Price

你可能是说

(Price ?? 0) / ((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1))

相反。

??
的值非常低,因此一行代码被解析为:

Price ?? (0 / ((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1)));
如果
Price
为空,则求值为
(0/((汇率==0)?1:(汇率±1))
,否则求值为
Price

你可能是说

(Price ?? 0) / ((ExchangeRate == 0) ? 1 : (ExchangeRate ?? 1))

相反。

十进制结果=价格??0/((汇率==0)?1:(汇率±1))=
十进制结果=Price.HasValue?价格:(0/(汇率=0)?1:(汇率=1))这是关于执行数学运算的顺序,你应该在第一个结果
(Price??0)/…
结尾处设置括号,作为一个打字错误,这只是一个括号问题,我只是想加进去:如果
Price
没有值,这不应该反映在结果上吗?这真的等同于
价格
为0吗?不需要回答,想想看。可能没问题。
decimal结果=价格??0/((汇率==0)?1:(汇率±1))=
十进制结果=Price.HasValue?价格:(0/(汇率=0)?1:(汇率=1))这是关于执行数学运算的顺序,你应该在第一个结果
(Price??0)/…
结尾处设置括号,作为一个打字错误,这只是一个括号问题,我只是想加进去:如果
Price
没有值,这不应该反映在结果上吗?这真的等同于
价格
为0吗?不需要回答,想想看。也许没关系。如果你想投票:解释OP为什么要这么做。现在你搞错了。如果
Price
非零,
result
将是
Price
,而不考虑问题原始版本中的汇率。是的,我正是这么说的,实际上价格不是零,这是因为“result”总是等于“Price”。但你是对的,如果你想投票,我会努力改进我的解释:解释OP为什么要这么做。现在你搞错了。如果
Price
非零,
result
将是
Price
,而不考虑问题原始版本中的汇率。是的,我正是这么说的,实际上价格不是零,这是因为“result”总是等于“Price”。但你是对的,我会努力改进我的解释