You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:03:38