c#为什么双精度四舍五入为整数



这个问题可能很愚蠢,但我不知道为什么会发生这种情况。问题是:我得到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 ;

最新更新