C++ 不必要的四舍五入C++;

C++ 不必要的四舍五入C++;,c++,math,rounding,C++,Math,Rounding,我有以下方程式: //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 =((15

我有以下方程式:

//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);
热敏电阻R0
热敏电阻β
为常数

temp
temp2
desired voltage
是无符号整数,在计算之前定义

例如,问题是,当术语
((temp2/temp)-1)
低于1时,它将舍入为0。我想去掉这个舍入,因为它给我的计算带来了巨大的问题


如何执行此操作?

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

不是四舍五入,而是整数除法。如果<代码> /< /C>操作符的两个操作数都是整数类型,C++的行为就是执行整数除法,它只保留结果的整数部分(这在某些算法中经常需要,因为它更快)。 要获得“常规”除法,请确保所涉及的操作数中至少有一个是浮点类型(
float
double
long double
);可以将涉及的变量声明为FP类型

double temp2, temp;
在其中一个操作数前面粘贴强制转换

temp=(THERMISTOR_R0)/((double(temp2)/temp)-1);
(请注意,如果
temp
仍然是整型,那么在这里您将导致截断)

最有可能的是,在这里,您只需将
temp
temp2
声明为
double
(或者
float
,如果您在资源非常紧张的环境中工作的话)


此外,当除以数值文字时,请记住,如果不写入小数点,它将是
int
文字;如果写入,它将是
双精度
。例如,
298
int
298.
double
,因此
1/2
0
,但
1/2.
0.5
编译器向下舍入浮点值


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

因此,如果我要声明
无符号浮点温度,temp2它可以解决我的问题?可能不是,因为C++中没有<代码>未签名的浮点< /C> >截断发生在将FP值赋给整型变量时,但是这里发生的是因为整数的除法运算类型是整数的,而且OP可能需要做类似的代码< > >(-Thermator_BETA)/298
如果
Thermator_BETA
是一个整数。@MichaelBurr:不过,它应该足以写入
(-Thermator_BETA)/298。
(其中
298.
是一个
文本)。