为什么在C#中12/13的运算结果为1?
嘿Ajit,这个问题其实是C#里整数除法和浮点除法的规则差异导致的,我给你拆解明白:
核心原因:C#根据操作数类型决定除法类型
C#里的除法行为完全取决于参与运算的两个操作数的类型:
- 整数除法:当两个操作数都是整数类型(比如
int、long)时,C#会执行整数除法——它只保留商的整数部分,直接舍去所有小数(不会四舍五入),结果也是整数类型。
比如你说的12/13,严格来说整数除法的结果应该是0(因为12除以13的商小于1,小数部分直接被舍弃),可能你是不是把表达式写成13/12了?不过不管怎样,核心规则是一致的:两个整数相除,结果只会是整数。 - 浮点除法:只要参与运算的操作数中有一个是浮点类型(比如
double、float),C#就会触发浮点除法,这时候会保留完整的小数部分,结果也是对应的浮点类型。
为什么转成double后能得到实际数值?
你说的“转换为double类型后得到实际数值”,应该是指把其中一个操作数先转成double,比如:
// 把12转成double,此时13会自动被隐式转换为double,执行浮点除法 double result = (double)12 / 13; // 结果是0.9230769230769231,这就是你要的实际数值
而如果是先做整数除法再转double,比如(double)(12/13),得到的会是0.0——因为整数除法已经把小数部分丢掉了,再转类型也补不回来。
简单总结就是:整数相除只留整数商,有浮点参与才会做完整的除法运算~
内容的提问来源于stack exchange,提问作者Ajit
相关产品推荐
相关产品推荐

