C#与Python基础数学计算结果差异原因咨询
为什么C#和Python基础数学计算结果不同?
先看你给出的两段代码:
Python代码
def test(): l = 50 r = 3 gg= l + (r - l) / 2 mid = l + (r - l) // 2 print(mid) print(gg)
C#代码
public void test() { var l = 50; var r = 3; var gg = l + (r - l) / 2; double x = l + (r - l) / 2; var mid = Math.Floor(x); Console.WriteLine(mid); Console.WriteLine(gg); }
两者结果不同的核心原因是整数除法规则和类型处理的差异,具体拆解:
整数除法的取整逻辑不一样
- Python的
//是地板除法(向下取整):计算(r-l)//2时,r-l是3-50=-47,-47//2结果是-24(取比-23.5更小的整数),所以mid = 50 + (-24) = 26。 - C#的整数除法
/是向零取整:同样r-l=-47,-47/2结果是-23(直接截断小数部分,向0靠拢),后续x = 50 + (-23) = 27.0,Math.Floor(27.0)还是27,所以C#的mid是27。
- Python的
浮点数/整数类型的隐式转换差异
- Python中
/除法不管操作数是不是整数,都会返回浮点数:(r-l)/2 = -47/2 = -23.5,所以gg = 50 + (-23.5) = 26.5。 - C#中如果操作数都是整数,
/执行整数除法,结果也是整数:(r-l)/2=-23,gg = 50 + (-23) = 27(此时gg的类型是int);即使后面把表达式转成double,也是基于整数除法的结果计算,所以x的值是27.0。
- Python中
内容的提问来源于stack exchange,提问作者Attiq Rahman
相关产品推荐
相关产品推荐

