1

我不太确定正确的转换,尤其是从 unsigned int 和 #defines (无论是什么类型)到加倍。

在这个例子中

#define SPEEDSENSOR_EDGES_NUM 10

int speed_counter_left;

double result = speed_counter_left / SPEEDSENSOR_EDGES_NUM;

当 speed_counter_left < 10 时,结果始终为 0。

所以我加入了一些演员表:

double result = (double) ((double) speed_counter_left / (double) SPEEDSENSOR_EDGES_NUM);

这是正确的,但我认为演员太多了。我怎样才能用最少的演员找出正确的方法?

4

2 回答 2

6

有一个double操作数就足够了:

double result = (double)speed_counter_left / SPEEDSENSOR_EDGES_NUM;

演员“坚持”最接近speed_counter_left。所以它本质上相当于:

double result = ((double)speed_counter_left) / SPEEDSENSOR_EDGES_NUM;

和#defines(无论是什么类型)加倍。

标准说:

6.4.4.1 - 5

整数常量的类型是可以表示其值的对应列表中的第一个。

并且(对于没有后缀的十进制常量)列表如下:int, long int, long long int.

于 2012-06-03T11:42:40.447 回答
0

无需强制转换,SPEEDSENSOR_EDGES_NUM通过double使用10.0而不是10.

#define SPEEDSENSOR_EDGES_NUM 10.0

int speed_counter_left;

double result = speed_counter_left / SPEEDSENSOR_EDGES_NUM;
于 2012-06-03T11:49:12.057 回答