这个问题可能很愚蠢,但我不知道为什么会发生这种情况。问题是:我得到double someDouble = (39 * 10) / 100;
,得到someDouble=3.0,而不是3.9。我根本不知道为什么会这样,帮帮我吧?
因为当你把整数乘成整数并除以整数时,你会得到一个整数。
在计算出之后,它被隐式地强制转换为双。
因为这里所做的是整数除法。.NET有3种类型的划分。来自7.7.2分部操作员
- 整数除法
- 浮点除法
- 小数除法
整数除法:
除法将结果向零四舍五入,结果的绝对值是最大可能的整数,该整数小于两个操作数的商的绝对值。
您可以使用其中一个;
double d = (39 * 10) / 100d
double d = (39d * 10d) / 100d
double d = (double)(39 * 10) / 100
使其成为
double someDouble = (39.0 * 10.0) / 100.0;
这是因为您正在进行整数除法:
double someDouble = (39 * 10) / 100;
如果你想做浮点除法,那么至少有一个操作数需要是双:
double someDouble = (39 * 10) / 100.0;
另一个解决方案
double someDouble = ((double)39 * 10) / 100;
这是正常行为,请尝试只是澄清一下有三种类型的分部运营商
- 整数除法
- 浮点除法
- 小数除法
在您的情况下,我们有整数除法,编译器会将其视为整数,因为它是快速而简单的操作,而简单精度或双精度操作(双精度、浮点、十进制)非常复杂,而且如维基百科中所述,cpu和时间消耗很大http://en.wikipedia.org/wiki/Floating_point#Multiplication_and_division了解更多的含义
double someDouble = (39f * 10f) / 100f;
希望这能帮助
表达式中的所有三个值都是整数。CCD_ 2也是一个整数。100也是。整数390除以整数100得到3,正如你所期望的那样。
此外,优化器将在编译时评估该常量表达式,并简单地将生成IL更改为
double someDouble = 3 ;