为什么C#中4/3与4.0/3.0的计算结果不一致?
为什么C#中4/3和4.0/3.0的计算结果不同?
先看你给出的正确计算球体体积的代码:
public static double CalculateBallVolume(double aRadius) { double volume = (4.0 / 3.0) * Math.PI * Math.Pow(aRadius,3); return volume; }
当你把(4.0 / 3.0)换成(4 / 3)后结果出错,核心原因是C#里整数除法和浮点数除法的规则完全不同:
- 当除法操作的两个操作数都是整数类型(比如
4和3都是int)时,C#会执行整数除法——它会直接舍弃计算结果的小数部分,只保留整数商。所以4 / 3的结果不是你预期的1.333...,而是1。 - 当操作数是浮点数类型(比如
4.0和3.0都是double)时,C#会执行浮点数除法,这时候会完整保留小数部分,计算结果是1.3333333333333333,这才符合球体体积公式里的系数要求。
举个直观的例子:
int intDivision = 4 / 3; // 结果是1 double floatDivision = 4.0 / 3.0; // 结果是1.3333333333333333
回到你的球体体积计算,用4/3的话,公式实际上变成了1 * Math.PI * Math.Pow(aRadius,3),和正确的(4/3)πr³差了三分之一,自然结果就不对了。
内容的提问来源于stack exchange,提问作者Wizards Fart
相关产品推荐
相关产品推荐

