0

今天我遇到了一个问题,无法弄清楚这个简单的陈述有什么问题

我试过了

double d =1/4;

对我来说是预期的,0.25但实际上是0.0为什么会这样?

如果语句是这样的整数变量,我们应该怎么做

double a =(a-b)/(d+e); 
4

4 回答 4

6

因为您在这里所做的是整数除法1 / 4总是给你0一个结果,不管你是什么类型的。

.NET 有 3 种类型的划分。从7.7.2 Division operator

  • 整数除法
  • 浮点除法
  • 小数除法

整数除法部分;

除法将结果向零舍入,结果的绝对值是小于两个操作数的商的绝对值的最大可能整数。

如果你想要0.25结果,你应该将你的值之一定义为浮点数。

您可以使用其中之一;

double d = 1d / 4d;
double d = 1d / 4;
double d = 1 / 4d;

如果语句是这样的整数变量,我们应该怎么做

双a =(ab)/(d + e);

我假设您的a,bde整数,那么您应该使用其中之一;

double a = (double)(a-b) / (double)(d+e);
double a = (a-b) / (double)(d+e);
double a = (double)(a-b) / (d+e);
于 2013-10-26T11:35:55.557 回答
2
double d =1d/4; 

应该管用。如果您未指定数字的类型,则将其视为整数。整数 1/4 将为零。

于 2013-10-26T11:36:15.960 回答
1

/ 运营商 ( msdn )

当你将两个整数相除时,结果总是一个整数。例如,7 / 3 的结果是 2。要确定 7 / 3 的余数,请使用余数运算符 (%)。要获得作为有理数或分数的商,请给出除数或除数类型float或类型 double。如果通过将数字放在小数点右侧将被除数或除数表示为小数,则可以隐式分配类型。

尝试这个:

double d = 1.0 / 4.0;
于 2013-10-26T11:36:52.767 回答
1

用这个:

double d = (double) 1 / 4;
于 2013-10-26T11:36:57.073 回答