在c中使用math.h函数无法进行双精度到整数的转换

在c中使用math.h函数无法进行双精度到整数的转换,c,int,double,type-conversion,math.h,C,Int,Double,Type Conversion,Math.h,这是我正在运行的代码,但当我打印出结果时,结果是1,而不是82。dataBuf是一个int16_t数组。所有其他的math.h函数都可以很好地进行转换,但trig函数不起作用。math.h中的三角函数使用弧度,而不是度数。通过乘以180/pi,(57.29577951308232),可以将弧度转换为度 acos(0.13)将返回1.440427347091751弧度,乘以57.29577951308232给出82.53040768358306度的结果。OP预期的结果是度,而acos()返回的结果

这是我正在运行的代码,但当我打印出结果时,结果是1,而不是82。dataBuf是一个int16_t数组。所有其他的math.h函数都可以很好地进行转换,但trig函数不起作用。

math.h中的三角函数使用弧度,而不是度数。通过乘以
180/pi
,(
57.29577951308232
),可以将弧度转换为度


acos(0.13)
将返回
1.440427347091751
弧度,乘以
57.29577951308232
给出
82.53040768358306
度的结果。

OP预期的结果是度,而
acos()
返回的结果是弧度,这一点已由

此外,OP代码经历了
int
截断而不是舍入。示例:尝试计算90度的结果时<代码>acos(0)-->
1.570796…
。将此值转换为度时,结果可能刚好小于
90.0
,如
89.99999999…
。将其转换为
int16\t
时,结果将被截断为89,而不是所希望的
90
。最好在转换为整数之前对浮点值进行四舍五入

dataBuf[1] = acos(0.130f);

Trig的单位是弧度,而不是度数。经确认,我是个白痴
acos(0.130f)*180/m\u PIl
acos
接受类型为
double
的参数(并返回相同类型的结果)<代码>acos(0.130)会更有意义。如果您确实想使用
float
,请使用
acosf(0.130f)
。作为将来的参考,不要只告诉我们你打印了结果,告诉我们如何打印。一个常见的错误(您显然没有在这里犯)是使用了错误的
printf
说明符。@Keith Thompson我在微控制器上使用它,并通过UART传输结果。我认为这会使问题变得更复杂,所以我决定不把它放进去。
dataBuf[1] = (int16_t) round(acos(0.130f) * 180/M_PI);`
// or using float functions
const float r2d = 180/M_PI;
dataBuf[1] = (int16_t) roundf(acosf(0.130f) * r2d);`