问题可能是愚蠢的,但我不知道为什么会发生这种情况。这是问题所在:
我得到double someDouble = (39 * 10) / 100;
,我得到someDouble = 3.0,而不是3.9。我只是不知道为什么会这样,请帮忙吗?
答案 0 :(得分:7)
因为当你将整数乘以整数并除以整数时 - 你得到一个整数。
在计算之后隐含地将其加载到。
答案 1 :(得分:4)
因为你所做的就是整数除法。 .NET有3种类型的划分。从7.7.2分部运营商
整数师:
除法将结果舍入为零,结果的绝对值是最大可能的整数,小于两个操作数的商的绝对值。
您可以使用其中之一;
double d = (39 * 10) / 100d
double d = (39d * 10d) / 100d
double d = (double)(39 * 10) / 100
答案 2 :(得分:3)
成功
double someDouble = (39.0 * 10.0) / 100.0;
答案 3 :(得分:3)
这是因为你正在进行整数除法:
double someDouble = (39 * 10) / 100;
如果你想做浮点除法,那么至少有一个操作数必须是双精度数:
double someDouble = (39 * 10) / 100.0;
答案 4 :(得分:3)
另一个解决方案
double someDouble = ((double)39 * 10) / 100;
答案 5 :(得分:2)
这是正常的行为请试试这个 只是为了澄清有三种类型的除法运算符
在你的情况下我们有整数除法,并且编译器会把它当作整数,因为它快速而简单的操作,而简单的精度或双精度操作(双,浮点,十进制在.net)相当复杂和cpu ant耗时如维基百科所述,请查看http://en.wikipedia.org/wiki/Floating_point#Multiplication_and_division以了解更多含义
double someDouble = (39f * 10f) / 100f;
希望这个帮助
答案 6 :(得分:0)
表达式中的所有三个值都是整数。 39 * 10
也是一个整数。所以是100.将整数390除以整数100得到3就像你期望的那样。然后被抛弃。
此外,优化器将在编译时评估该常量表达式并简单地将生成IL更改为等效于
double someDouble = 3 ;