2

我有以下等式:

//get thermistor resistor value
temp=(THERMISTOR_R0)/((temp2/temp)-1);

//get temperature value in Kelvins and convert to Celsiuis
temp=(THERMISTOR_BETA)/log(temp/(THERMISTOR_R0*exp((-THERMISTOR_BETA)/298)));
temp-=273;

desiredVoltage =((15700-(25*temp))/10);

THERMISTOR_R0并且THERMISTOR _BETA是恒定的。

temp,temp2并且desiredVoltage是 unsigned int 并且在计算之前定义。

问题是,例如,当项((temp2/temp)-1)低于 1 时,它会向下舍入为 0。我想摆脱这种舍入,因为它会给我的计算带来很大的问题。

我该怎么做呢?

4

3 回答 3

8

这不是四舍五入,而是整数除法。如果运算符的两个操作数/都是整数类型,则 C++ 的行为是执行整数除法,它只保留结果的整数部分(这在某些算法中经常需要,因为它更快)。

要获得“常规”除法,请确保所涉及的至少一个操作数是浮点类型(floatdoublelong double;您可以将涉及的变量声明为 FP 类型

double temp2, temp;

要么在其中一个操作数前面粘贴一个演员表。

temp=(THERMISTOR_R0)/((double(temp2)/temp)-1);

(请注意,如果temp仍然是整数类型,您将在此处发生截断)。

最有可能的是,在这里您只想将tempand声明temp2double(或者float如果您在一个非常资源紧张的环境中工作)。

此外,当除以数字文字时,请记住,如果你不写小数点,它将是一个int文字,如果你写它,它将是一个double. 例如,298是一个int298.是一个double,所以1/20,但是1/2.0.5

于 2012-08-13T23:07:46.900 回答
2

如果您想要浮点除法行为,请确保使用浮点类型。

于 2012-08-13T23:04:23.753 回答
0

编译器向下舍入浮点值。

通常,这个问题通过在转换为整数之前的值加上 0.5 来解决。您可能希望显式使用浮点值(或强制转换),然后将 0.5 添加到结果中,然后再强制转换为整数。

于 2012-08-13T23:08:56.650 回答