首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模数在C#和Excel中有什么不同?

模数在C#和Excel中有什么不同?
EN

Stack Overflow用户
提问于 2016-02-14 15:55:00
回答 2查看 1.2K关注 0票数 5

我正在试验负基数系统,我使用Excel来玩和检查我的计算。

我注意到C#与Excel之间存在差异。为什么C#返回与Excel不同的结果?

例如:

C#:146 % -3 =2

Excel:国防部(146,-3) = -1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-14 16:19:29

正如维基百科文章所述,模块操作是股息%除数==余数。当操作数中的任一为负值时,就会出现问题。在这一点上,天真的数学定义崩溃,结果成为实现依赖的。

在Excel中,mod运算符总是以与除数相同的符号返回结果。从数学上讲,模运算中使用的商数向下四舍五入(朝向−∞)。在伪码中:

代码语言:javascript
复制
quotient = floor(dividend / divisor)
mod      = dividend - (divisor * quotient)

因此,146和-3:

代码语言:javascript
复制
quotient = -49      // floor(146 / -3)
mod      = -1       // 146 - (-3 * -49) == 146 - 147

在C#中,情况正好相反:结果总是与股息相同。这是因为商数被截断为0。在伪码中:

代码语言:javascript
复制
quotient = truncate(dividend / divisor)
mod      = dividend - (divisor * quotient)

因此:

代码语言:javascript
复制
quotient = -48     // truncate(146 / -3)
mod      = 2       // 146 - (-3 * -48) == 146 - 144
票数 6
EN

Stack Overflow用户

发布于 2016-02-14 16:16:56

假设我们有四个整数: x,y,q和r,使得

代码语言:javascript
复制
 q = x / y
 r = x - q * y   

我希望商数和余数必须有这种关系是有道理的。

现在我们来看看C#和Excel的不同之处。区别实际上在于除法,而不是余数。当计算两个整数的商数时,C#舍入为零,而Excel舍入。也就是说,在C# 8/ -3 is -2中,在excel中INT(8 / -3) is -3。

从这个事实,你可以推断为什么剩下的是不同的。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35393745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档