不需要的舍入C++

moe*_*sef 2 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 =((15700-(25*temp))/10);
Run Code Online (Sandbox Code Playgroud)

THERMISTOR_R0并且THERMISTOR _BETA是不变的.

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

问题是,例如,当术语((temp2/temp)-1)低于1时,它会向下舍入到0.我想摆脱这种舍入,因为它会导致我的计算出现大问题.

我该怎么做呢?

Mat*_*lia 8

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

要获得"常规"除法,请确保所涉及的操作数中至少有一个是浮点类型(float,doublelong double); 您可以将此参数声明为FP类型

double temp2, temp;
Run Code Online (Sandbox Code Playgroud)

要么在其中一个操作数前面贴一个演员.

temp=(THERMISTOR_R0)/((double(temp2)/temp)-1);
Run Code Online (Sandbox Code Playgroud)

(请注意,如果temp仍然是整数类型,这里你将发生截断).

最可能的是,在这里你只是想声明temp,并temp2作为double(或者float,如果你是在一个真正的资源紧的环境中工作).

另外,当用数字文字除以时,请记住,如果你不写小数点,它将是一个int文字,如果你写它,它将是一个double.例如,298int,298.double,那么1/2就是0,不过1/2.0.5.