c#为什么double舍入为整数

时间:2013-11-19 22:16:00

标签: c#

问题可能是愚蠢的,但我不知道为什么会发生这种情况。这是问题所在: 我得到double someDouble = (39 * 10) / 100;,我得到someDouble = 3.0,而不是3.9。我只是不知道为什么会这样,请帮忙吗?

7 个答案:

答案 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)

这是正常的行为请试试这个     只是为了澄清有三种类型的除法运算符

    整数除法
    浮点除法
    十进制分割

在你的情况下我们有整数除法,并且编译器会把它当作整数,因为它快速而简单的操作,而简单的精度或双精度操作(双,浮点,十进制在.ne​​t)相当复杂和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 ;