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”。但你是对的,我会努力改进我的解释